пакетное переименование файлов с неповрежденными идентификаторами - PullRequest
1 голос
/ 17 августа 2011

У меня есть список каталогов, как

seascaperecovered0088crop.jpg 
seascaperecovered0096crop.jpg
seascaperecovered0098crop.jpg
seascaperecovered0101crop.jpg
seascaperecovered0103crop.jpg
seascaperecovered0105crop.jpg
seascaperecovered0107crop.jpg
seascaperecovered0112crop.jpg
seascaperecovered0119crop.jpg
seascaperecovered0122crop.jpg

и я хочу переименовать все файлы, как показано здесь:

seascape_0122.jpg

Я пробовал что-то вроде этого:

for f in `ls | egrep 'seascaperecovered.*\.jpg'`; 
do mv $f ${f/seascaperecovered/seascape}; 
done

Я читал, что вы можете сделать это с помощью mv, rename, sed, awk и т. Д. Может кто-нибудь указать мне на самый простой (и, надеюсь, самый ясный) способ сделать это в UNIX? FWIW, я ssh'd в Linux-машине и запускаю оболочку bash.

спасибо, JML

Ответы [ 2 ]

5 голосов
/ 17 августа 2011

Очень просто:

for i in seascaperecovered*.jpg; do A=${i/crop/}; mv $i ${A/recovered/_}; done

(Поставьте echo перед mv первым для пробного прогона.)

1 голос
/ 17 августа 2011

С регулярными выражениями bash

for file in *; do 
  [[ "$file" =~ [0-9]+ ]] && mv "$file" seascape_${BASH_REMATCH[0]}.jpg 
done
...