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

Я пытаюсь изменить файлы, которые выглядят как

01 Track name.mp3

в

01 - Track name.mp3

До сих пор мои бесполезные попытки

 rename '0. ' '$&- ' *.mp3 rename 's/0. /$&- /' *.mp3 rename '/0. /' '/$&- /' *.mp3 rename 's/0.\ /$&-\ /' *.mp3 rename 's/0.\ /$1-\ /' *.mp3 

5 Solutions collect form web for “Как я могу использовать команду rename для исправления этих имен файлов?”

Предполагая команду rename perl:

Вы совсем рядом с последней командой. rename 's/(0.) /$1 - /' *.mp3 . Нет необходимости скрывать пространство, они не имеют особого значения в регулярных выражениях (они имеют имена файлов, но это не имеет значения здесь), и вам нужны скобки вокруг той части, которую вы хотите повторно использовать.

Нужно ли использовать команду rename ?

 $ ls 01 Track name.mp3 02 Track name.mp3 03 Track name.mp3 $ for a in *.mp3 > do > mv -i "$a" "${a%% *} - ${a#* }" > done $ ls 01 - Track name.mp3 02 - Track name.mp3 03 - Track name.mp3 
 $ rename 's/^(\d\d)\s*/$1 - /' *.mp3 

Это приведет к переименованию всех файлов MP3, которые имеют двойную цифру в начале их имен файлов, вставляя пробел-пробел после цифр. So 01 Track name.mp3 станет 01 - Track name.mp3

Судя по вашим собственным попыткам, все имена файлов начинаются с цифры 0, и вы, кажется, хотите вставить штрих непосредственно после цифр, за которыми следует пробел:

 $ rename 's/^(0\d)\s*/$1- /' *.mp3 

Это преобразовывает 01 Track name.mp3 to 01- Track name.mp3 .

По-моему, это rename Перла. Возможно, что-то вроде этого будет работать:

 rename 's/^(\d+) ([^-])/$1 - $2/' [0-9]*.mp3 

Сопоставьте что-нибудь, начиная с цифр, затем пробел, затем нечто, отличное от тире. Замените номера, тире и следующий символ. (Остальное имя не тронуто.) Явно проверяю тире здесь, поэтому повторяющиеся приложения не заканчиваются такими файлами, как 01 - - Track name.mp3 .

На самом деле, ваш второй пример, похоже, работает, хотя, конечно, для имен, где первая цифра равна нулю. Мы могли бы изменить это на любые цифры и заменить второе захваченное выражение негативным взглядом вперед, чтобы все еще не добавлять более одного тире.

 rename 's/^\d+ (?!-)/$&- /' *.mp3 

( (?!pattern) будет соответствовать позиции, за которой не следует pattern , но совпадение имеет нулевую ширину, поэтому она не вызывает замены.)

Есть две (три) команды стирания: одна часть пакета util-linux , установленная на каждой не встроенной системе Linux, и одна (два варианта на самом деле) на основе Perl. Посмотрите, что со всеми переименованиями: имя, переименование, переименование файлов?

Команда util-linux очень проста, но вы находитесь в редкой ситуации, когда она может делать то, что вы хотите. Замените первое пространство пространственным пробелом:

 rename ' ' ' - ' [0-9][0-9]\ [^-]* 
  • Поиск всех «не двоичных» файлов
  • В системах Unix, почему мы должны явно открывать файлы `open ()` и `close ()`, чтобы они могли читать `read ()` или `write ()` them?
  • Присоединиться: два файла - но только добавить последние два столбца
  • Как подождать файл в сценарии оболочки?
  • Реагировать на входящие файлы в каталоге на HP-UX
  • Неверная эмблема, используемая для PDF-файлов, созданных LibreOffice
  • Сортировка каталогов по последним измененным датам / времени файла с одинаковым именем
  • найти с помощью -execdir
  • Как происходит модификация файла inplace в файле?
  • Сортировка файлов с определенным расширением с измененным временем и сохранение их в массив
  • Emacs, полный список цветных клавиш
  • Linux и Unix - лучшая ОС в мире.