2013-08-15 6 views
1

Я пытаюсь переименовать файлы, например. screen-0001.tif к 0001.tif с использованием подхода в this SO question:Пакетное переименование файлов в OSX-терминале

for file in *.tif 
do 
    echo mv "$file" "${screen-/file}" 
done 

не в состоянии изменить что-либо. Благодарен за идею, где я ошибаюсь.

+5

Вы 'echo' не выполняя эту команду. Кроме того, вам лучше использовать '$ {file/screen - /}' для удаления исходного текста «screen-». – fedorqui

+1

Cheers. Положите это как ответ Мат, я проголосую за него – geotheory

ответ

1

Две вещи:

  1. Вы вторя команды и фактически не выполняет их. Я сделаю это, когда буду делать массовые переименования, чтобы убедиться, что команда работает правильно. Я могу перенаправить вывод в файл, а затем использовать этот файл в качестве сценария оболочки.
  2. Замена неправильная. Существует два способа:
    1. Слева самый фильтр ${file#screen-}.
    2. Замена: ${file/screen/}

Имя переменной среды всегда идет первым. Тогда тип шаблон, то картина

Вот как бы я это сделать:

$ for file in *.tif 
> do 
> echo "mv '$file' '${file#screen-}'" 
> done | tee mymove.sh # Build a shell script 
$ vi mymove.sh   # Examine the shell script and make sure everything is correct 
$ bash mymove.sh   # If all is good, execute the shell script. 
2

Чем проще, ИМХО, способ сделать это с помощью rename сценария Perl. Здесь я использую его с --dry-run, поэтому он просто говорит вам, что он будет делать, а не делать что-либо вообще. Вы бы просто удалить --dry-run, если/когда вы счастливы с командой:

rename --dry-run 's/screen-//' *tif 

'screen-001.tif' would be renamed to '001.tif' 
'screen-002.tif' would be renamed to '002.tif' 
'screen-003.tif' would be renamed to '003.tif' 
'screen-004.tif' would be renamed to '004.tif' 

Он имеет дополнительное преимущество, что она не будет перезаписывать любые файлы, которые происходят, чтобы выйти на то же имя. Так что, если у вас файлы:

screen-001.tif 
0screen-01.tif 

И вы сделали это, вы получите:

rename 's/screen-//' *tif 
'screen-001.tif' not renamed: '001.tif' already exists 

rename легко устанавливается с помощью Homebrew, используя:

brew install rename 
Смежные вопросы