Ответ 1
find . -depth -name "*from_stuff*" -execdir sh -c 'mv {} $(echo {} | sed "s/from_stuff/to_stuff/")' \;
Раньше у меня была машина Debian, и я помню, что использовал что-то вроде:
shopt -s globstar
rename 's/changethis/tothis/' **
Но, может быть, потому, что моя версия bash (версия 3.2.48 (1)) не обновляется, я получаю:
-bash: shopt: globstar: invalid shell option name
-bash: rename: command not found
Каким будет другой способ рекурсивного переименования файлов и папок в OS X? (10.8.5)
Я хочу переименовать каждую папку и файл с строкой sunshine
в ней на sunset
. поэтому файл:
post_thumbnails_sunshine
станет post_thumbnails_sunset
, а r_sunshine-new
станет r_sunset-new
и т.д.
find . -depth -name "*from_stuff*" -execdir sh -c 'mv {} $(echo {} | sed "s/from_stuff/to_stuff/")' \;
Это должно сделать трюк:
find . -name '*sunshine*' | while read f; do mv "$f" "${f//sunshine/sunset}"; done
* для особого переименования только файлов используйте -type f
, для каталогов используйте -type d
Вы можете использовать регулярное выражение в команде find
, как указано @mbratch в комментариях. Вы можете использовать -regex
, -iregex
и -regextype
, чтобы предоставить полное выражение для find
. Затем вызовите -exec mv {} +
(обратите внимание на знак +
).