Если вам нужно переименовать файлы и в подкаталогах, и вы find
поддерживаете -execdir
предикат, то вы можете сделать
find /search/path -depth -name '* *' \
-execdir bash -c 'mv -- "$1" "${1// /_}"' bash {} \;
Спасибо @glenn Jackman за предложенный -depth
вариант find
и заставил меня задуматься.
Обратите внимание, что в некоторых системах (включая GNU / Linux) find
может не найти файлы, имя которых содержит пробелы, а также последовательности байтов, которые не образуют допустимые символы (обычно для файлов мультимедиа с именами, отличными от символов ASCII, закодированных в кодировке). отличается от локали). Установка локали C
(как в LC_ALL=C find...
) решит проблему.
find -maxdepth 1
именно то, что ОП спросил о работе с текущей папкой.-depth
, и вы можете избавиться отsort
.-name '* *'
на-name '*_*'
и изменить"${1// /_}"
на"${1//_/.}"
bash
справочной странице.В любой оболочке вы можете перебирать файлы, имя которых содержит пробел. Заменить пробелы подчеркиванием легко в bash, ksh и zsh с помощью
${VARIABLE//PATTERN/REPLACEMENT}
конструкции.В Debian, Ubuntu и его производных вы можете использовать Perl
rename
(другие дистрибутивы поставляются с другой программойrename
, и эта программа здесь не нужна).Обязательное зш решение:
Обязательное решение POSIX:
источник
s/…/…/g
означает заменить все вхождения. Это не очень хорошо объяснено в руководстве . Если вы хотите переименовать каталоги, есть способы, пожалуйста, найдите их (кажется, я видел это раньше) и, если вы не можете найти их, задайте новый вопрос._MG_blah.JPG
вIMG_blah.JPG
.Вы можете использовать
rename
для этого (здесь предполагается, что один изutil-linux
, а неperl
один):Это позволит найти все файлы и каталоги в имени и заменить пробел подчеркиванием. Поскольку он использует сопоставление глобальных файлов, вы должны быть в правильном каталоге для начала.
Если вы хотите сделать рекурсивные соответствия, вы можете, но вам, возможно, придется выполнить
rename
пару раз, чтобы перехватить любые элементы в каталогах, которые сами были переименованы:источник
rename
Переименует указанные файлы, заменив первое вхождение from в их имени на to» . Таким образом, это будет работать только для файлов с одним пробелом в имени. (Вы можете позвонитьrename
в цикле, но это не совсем правильный инструмент здесь.)Другой вариант будет
mmv
, если установлен.источник
_
, он не работает с именами с несколькими пробелами.В Debian / Ubuntu, опираясь на ответы Калеба и Жиля, я рекурсивно переименовал файлы:
Примечание. Чтобы просмотреть, какие файлы будут переименованы и как, используйте
-n
переключатель сrename
:Еще одно примечание: настройка
globstar
позволяет**
сопоставлять файлы во всех подкаталогах, поэтому, если требуется только текущий каталог, не устанавливайте globstar или используйте*
вместо**
.Еще одно примечание:
rename
команду необходимо запускать более одного раза для файлов с несколькими вхождениями поискового запроса.источник
a b/c d
вa_b/c_d
не сработает, сначала нужно переименоватьa b/c d
вa b/c_d
, а затемa b
вa_b
).rename
команду дважды?**
исключает точечные файлы и пересекает символические ссылки.Если вы не любите регулярные выражения (а я нет!), И вы можете запускать приложения, разработанные для kde (либо вы используете рабочий стол kde-k, либо у вас установлены его библиотеки), то krename - отличная графическая утилита, которая позволяет увидеть до и после, прежде чем вы передаете изменения. Он имеет ряд простых преобразований в качестве параметров, а также поддерживает регулярные выражения. Вы даже можете объединить несколько последовательных преобразований в одно переименование, чтобы вам не приходилось проектировать одно сложное преобразование, которое выполняет все сразу. Он также имеет возможность продолжить переименование тех же файлов после применения переименования.
Я использую его не так часто, но когда я это делаю, он действительно быстро и легко выполняет свою работу. Это действительно удобно при переименовании различных загруженных медиа-файлов, чтобы вы могли управлять ими в своей системе единообразно. Это помогает загрузить руководство krename отдельно, чтобы вы могли обращаться к нему во время использования программы.
http://www.krename.net/
источник