Я просто хочу переименовать весь файл * .a в * .ab в текущем каталоге и подкаталогах, как это сделать в сценарии оболочки?
find . -type f -name '*.a' -print0 | xargs -0 -IZZ mv ZZ ZZ.b
Это должно обрабатывать имена файлов с пробелами и / или символами новой строки.Он также не переименовывает каталоги (другое решение делает find).Если вы хотите, чтобы он не учитывал регистр, используйте «-iname» вместо «-name»
Рубин (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
Попробуйте скрипт ниже:
for file in `find . -name '*.a'`; do mv $file $file.b; done
Чтобы переименовать <files> с этим, rename 's/\.a$/.a.b/' <files>. Выполнение этого рекурсивно займет всего лишь цикл.
<files>
rename 's/\.a$/.a.b/' <files>
(или используйте для файлов *, */*, */*/*, */*/*/* и т. Д.)
*
*/*
*/*/*
*/*/*/*