2015-04-11 2 views
2

Я только начал изучать Bash. Я хочу сделать скрипт, чтобы найти определенные папки в каталоге и его подкаталогах, и если он существует, переименуйте его в ту же папку, где мы его нашли. Та же самая конкретная папка может быть в некоторых подкаталогах.Bash - Найдите несколько конкретных папок в каталоге и его sbdirectories и переименуйте эти папки.

Я использую это:

file=`find . -name a` 
if [ -d $file ] 
then 
rename 's/a/b/' $file 
fi 

Но не работают. Есть ли способ сделать этот процесс?

Спасибо.

Наконец, я решил проблему с этим:

find . -name "a" -type d -execdir rename 's/a/b/' {} \; &>/dev/null 

ответ

3

Вы можете сделать это с Oneliner:

find . -name "a" -type d -execdir rename 's/a/b/' {} \;

Параметр с именем может быть регулярное выражение. С -type d он найдет все каталоги. -execdir изменяется в каталог соответствующего элемента, а затем выполняет команду rename, передавая имя файла в качестве аргумента ({}).

+0

Извините, по ошибке используется -type f вместо -type d :) –

+0

Я никогда не нашел find ... -exec ужасно полезным. Зачем? разве вы не хотели бы видеть список кандидатов до того, как будете его калечить? поэтому ... find * -name a -type d; затем повторите поиск ... | awk '{o = $ 1; sub ("/ \/a \ //", "/ b /", o) printf ("mv% s% s \ n", $ 1, o)} '... untested. переименовать? а не Mac OS X, должен быть Linux? –

+0

Обычно я делаю это с помощью -exec, проще для более простых операций, но в этом случае ваш метод тоже качается. –

Смежные вопросы