Назад | Перейти на главную страницу

замените символ 'пробел' в имени файла на подчеркивание

У меня есть куча файлов в каталоге с пробелами в имени файла.

Как выполнить массовое переименование всех имен файлов с помощью пробелов и заменить их символом «_».

Глядя на другие решения, я безуспешно пробовал следующую команду:

найти . -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