оболочка bash: как переименовать файлы - PullRequest
1 голос
/ 22 марта 2011

Я просто хочу переименовать весь файл * .a в * .ab в текущем каталоге и подкаталогах, как это сделать в сценарии оболочки?

Ответы [ 4 ]

7 голосов
/ 22 марта 2011
find . -type f -name '*.a' -print0 | xargs -0 -IZZ mv ZZ ZZ.b

Это должно обрабатывать имена файлов с пробелами и / или символами новой строки.Он также не переименовывает каталоги (другое решение делает find).Если вы хотите, чтобы он не учитывал регистр, используйте «-iname» вместо «-name»

2 голосов
/ 22 марта 2011

Рубин (1,9 +)

$ ruby -e 'Dir["**/*.a"].each{|x|File.file?x && File.rename(x,"#{x}.b")}'

В скрипте оболочки (как минимум Bash 4)

shopt -s globstar
shopt -s nullglob
for file in **/*.a
do
 echo mv "${file}" "${file}.b"
done
1 голос
/ 22 марта 2011

Попробуйте скрипт ниже:

for file in `find . -name '*.a'`; do mv $file $file.b; done
1 голос
/ 22 марта 2011

Чтобы переименовать <files> с этим, rename 's/\.a$/.a.b/' <files>. Выполнение этого рекурсивно займет всего лишь цикл.

(или используйте для файлов *, */*, */*/*, */*/*/* и т. Д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...