Первая проблема: вы использовали умные кавычки в операции xargs, то есть команда:
xargs -n 1 rename -v ‘s/(.*)\/([^\/]*)/$1\/\L$2/’ {} \;
никогда не собирался работать. Умные кавычки - недопустимые символы в оболочке. Присутствие {} \;
, кажется, указывает на то, что вы заново выполняли find -exec
, который в этом случае совершенно не нужен, поэтому xargs можно заменить на:
xargs -n 1 rename -v 's/(.*)\/([^\/]*)/$1\/\L$2/'
При добавлении -n
в целях тестирования он отображает несколько верхних -> нижних переименований файлов в моей файловой системе, поэтому, похоже, сейчас он работает правильно.
Мое предлагаемое переписывание:
find Files -depth -print0 | xargs -0 -n 1 rename -v 's/(.*)\/([^\/]*)/$1\/\L$2/'
Следует выполнить то, что вы пытаетесь, а также попытаться избежать проблем, связанных с файлами с пробелами в них.
без -print0
/ -0
, если я сделаю:
touch "common/this is EVIL"
тогда операции покажут, что он не будет переименовывать этот файл, тогда как если я использую -print0
/ -0
, то это покажет:
rename(common/this is EVIL, common/this is evil)