Как переименовать папки и файлы рекурсивно в MacOS

Раньше у меня была машина 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 и т.д.

Ответ 1

 find . -depth -name "*from_stuff*" -execdir sh -c 'mv {} $(echo {} | sed "s/from_stuff/to_stuff/")' \;

Ответ 2

Это должно сделать трюк:

find . -name '*sunshine*' | while read f; do mv "$f" "${f//sunshine/sunset}"; done

* для особого переименования только файлов используйте -type f, для каталогов используйте -type d

Ответ 3

Вы можете использовать регулярное выражение в команде find, как указано @mbratch в комментариях. Вы можете использовать -regex, -iregex и -regextype, чтобы предоставить полное выражение для find. Затем вызовите -exec mv {} + (обратите внимание на знак +).