Например, в каталоге /home/hel/files/
находятся тысячи файлов и сотни каталогов. Приложение сохраняет там свои выходные файлы со специальными символами в именах файлов. Я хочу заменить эти специальные символы подчеркиваниями во всех именах файлов. Например, -:"<>@
Я написал сценарий bash, который просто повторяет команду для переименования файлов с использованием Linux / Unix 'rename'.
Пример: имя файла: rename.sh
#!/bin/bash
rename "s/\'/_/g" *
rename 's/[-:"<>@\,&\s\(\)\[\]?!–~%„“;│\´\’\+#]/_/g' *
rename 'y/A-Z/a-z/' *
rename 's/\.(?=[^.]*\.)/_/g' *
rename 's/[_]{2,}/_/g' *
Я выполняю следующую команду поиска:
find /home/hel/files/ -maxdepth 1 -type f -execdir /home/hel/scripts/rename.sh {} \+
Теперь проблема:
Это работает нормально, за исключением того факта, что он также переименовывает подкаталоги, если у них есть искомые символы в их имени.
Команда поиска ищет только файлы, а не каталоги.
Я пробовал другие варианты поиска, такие как:
find /home/hel/files/ -maxdepth 1 -type f -execdir sh /home/hel/scripts/rename.sh {} \+
find /home/hel/files/ -maxdepth 1 -type f -execdir sh /home/hel/scripts/rename.sh {} +
find /home/hel/files/ -maxdepth 1 -type f -execdir sh /home/hel/scripts/rename.sh {} \;
Все они работают, но с одинаковым результатом.
Что не работает:
find /home/hel/files/ -maxdepth 1 -type f -exec sh /home/hel/scripts/rename.sh {} \+
Это опасно, потому что оно переименовывает каталоги и файлы в текущем каталоге, где вы тоже вызовите команду find.
Может быть, у вас есть идея, почему это происходит или есть лучшее решение.