Вы получаете переименование по именам каталогов, потому что find
команда возвращает полный путь к именам файлов, затем команда переименования выполняет переименование также на основе имени каталога. Так что если у вас есть файл в каталоге DIR1/FILE
, он будет переименован в dir1/file
то время, когда вы не хотите переименовывать каталог.
Вот команда для переименования только имени файла:
find . -type f -exec rename -n 's:([^/]*$):lc($1):e' {} +
В приведенной выше команде ([^/]*$)
соответствует только последняя часть пути, которая не содержит /
внутри пары круглых скобок, из (...)
которых она сопоставляется как группа совпадений. Затем переведите соответствующую часть ( $1
это индекс первой соответствующей группы) в нижний регистр с lc()
функцией.
При этом вам необходимо воспользоваться -n
возможностью переименования реальных файлов.
-exec ... {} +
для команд, которые могут иметь более одного файла одновременно (напримерcat
,stat
,ls
). Найденные файлыfind
связаны друг с другом какxargs
команда. Это означает, что меньшее количество разветвлений и небольших операций может означать значительное ускорение. [ Ответить на @Oli ]