найти все директории с именем X и переименовать имя на Y

ufaclub

Полезный
Регистрация
1 Май 2007
Сообщения
395
Реакции
19
искать папки register нужно в папке /var/www (их будет много)

т.е найти папку register и переименовать ее в stopregister

команда нужна для SHH на CentrOS


в корне положил файл файл rename.sh

#!/bin/bash
#Begin rename.sh

mv $1 `dirname $1`/stopregister

#end rename.sh

потом через shh делаю команду

find /var/www -type d -name "register" -exec rename.sh {} \;


в ответ получаю много строк с содержанием

find: `rename.sh': No such file or directory
find: `rename.sh': No such file or directory
find: `rename.sh': No such file or directory
.............
find: `rename.sh': No such file or directory

в чем моя ошибка?






пишет что
 
Код:
find . -depth -name "register" -exec bash -c 'for f; do base=${f##*/}; mv -- "$f" "${f%/*}/${base//register/stopregister}"; done' _ {} +

UP. Хотя данная команда поменяет не только папки, но и файлы..
Нужно пооперировать с ключами, в поиске добавим -type d
 
Последнее редактирование:
-exec rename.sh
Скорее всего нужно указывать полный путь к скрипту, например:
-exec /var/www/rename.sh

И право выполнения дать chmod +x rename.sh
 
Скорее всего нужно указывать полный путь к скрипту, например:
Только все равно, данная команда выполнит замену только первой корневой папки, дальше вглубь поиск не продолжится.
Типо результат: /register/register/register/ — /stopregister/register/register/
 
find . -depth -name "register" -exec bash -c 'for f; do base=${f##*/}; mv -- "$f" "${f%/*}/${base//register/stopregister}"; done' _ {} +

сработало.

я так понял если добавить после find /var/www

find /var/www -depth -name "register" -exec bash -c 'for f; do base=${f##*/}; mv -- "$f" "${f%/*}/${base//register/stopregister}"; done' _ {} +

то он будет искать только глубже папки /var/www
 
Да, верно.
. — ищет от текущей папки, указывая путь, ищет от указываемого пути.
 
Назад
Сверху