У меня есть куча файлов в каталоге с пробелами в имени файла.
Как выполнить массовое переименование всех имен файлов с помощью пробелов и заменить их символом «_».
Глядя на другие решения, я безуспешно пробовал следующую команду:
найти . -name '* *' -exec переименовать '' '_' {} +
find: rename: Нет такого файла или каталога
Пытаться:
$ for file in *; do [ -f "$file" ] && ( mv "$file" "$(echo $file | sed -e 's/ /_/g')" ); done
Прямого ответа нет, но большинство из них так или иначе ошибаются. Скорее всего, они не будут правильно использовать find, и вы можете получить глупые результаты, если какое-либо имя файла содержит ^ J.
Кроме того, если у вас есть / много / файлов, вы, вероятно, не хотите, чтобы ваш скрипт создавал sed или mv для каждой записи.
Вот способ сделать это правильно с помощью базового Perl:
find . -print0 | \
perl -e '$/="\000";' -ne '$o=$_;tr/ /_/;rename($o,$_);'
Спасибо за ответы.
Я нашел вот этот лайнер, который помог мне:
for i in *\ *; do if [ -f "$i" ]; then mv "$i" ${i// /_}; fi; done