Как заменить один символ другим во всех именах файлов текущих каталогов?

Как вы переименовываете все файлы /поддиры в текущей папке?

Допустим, у меня много файлов и поддиров, которые с пробелами, и я хочу заменить все пробелы символом подчеркивания.

File 1
File 2
File 3
Dir 1
Dir 3

следует переименовать в

File_1
File_2
File_3
Dir_1
Dir_3
33 голоса | спросил NobbZ 20 AM00000090000003631 2011, 09:26:36

2 ответа


31

Если вам нужно также переименовать файлы в подкаталоги, а ваш 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...) будет решать проблему.

ответил enzotib 20 AM00000090000005131 2011, 09:49:51
12

Вы можете использовать rename для этого (здесь предполагается, что один из util-linux, а не perl):

cd /path/to/dir
rename ' ' _ *\ *

Это найдет все имена файлов и каталогов в имени и заменит пробел знаком подчеркивания. Поскольку он использует сопоставление файлов glob, вы должны быть в правильном каталоге для начала.

Если вы хотите сделать рекурсивные соответствия, вы можете, но вам, возможно, придется выполнить rename пару раз, чтобы поймать любые предметы в каталоги, которые сами переименованы:

cd /path/to/dir
shopt -s globstar
rename ' ' _ **/*\ *
!!; !!
ответил Caleb 20 AM000000100000003531 2011, 10:26:35

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132