Пакетное переименование, добавление дополнительных & ldquo;. & Rdquo; символ в позиции 3 в имени файла, рекурсивно

Я изо всех сил пытаюсь выполнить эту работу, но я не очень хорошо знаком с регулярным выражением. Это то, что я пытался сделать, и это не сработало (через 50 минут, продолжая без видимых изменений):

while IFS= read -r -d '' file; do mv $file ${file:0:2}.${file:2}; done

Спасибо заранее!

1
задан 30 March 2015 в 01:00

2 ответа

Это можно сделать с помощью rename:

rename 's/ /\./' file.txt

Пример:

$ ls -l
-rw-rw-r-- 1 user user 0 Mar 30 04:22 01 Song Title.flac
$ rename 's/ /\./' 01\ Song\ Title.flac 
$ ls -l
-rw-rw-r-- 1 user user 0 Mar 30 04:22 01.Song Title.flac

EDIT: Если вы хотите пробел после 01.: [!d2 ]

rename 's/ /\. /' file.txt

Если вы хотите, чтобы все файлы под каталогом /directory/to/search и под всеми его подкаталогами, имеющими расширение .wav, переименовали, как ожидалось, попробуйте следующее:

find /directory/to/search -type f -name "*.wav" -execdir rename 's/(^\d+) /$1. /' {} +

Чтобы стать нечувствительным к регистру :

find /directory/to/search -type f -iname "*.wav" -execdir rename 's/(^\d+) /$1. /' {} +
0
ответ дан 23 May 2018 в 21:55

Это работает (проверено):

#!/bin/bash

filenames=$(find . -type f) # stores all filenames in $filenames
for filename in $filenames; do # for each member in $filenames
    newfilename=$(echo "$filename" | sed 's/\(.*\)\/\(..\)\(.*\)$/\1\/\2\.\3/') # edits $filename by adding a . after the second character and stores the edited string in $newfilename
    mv "$filename" "$newfilename" # renames $filename to $newfilename
done
0
ответ дан 23 May 2018 в 21:55

Другие вопросы по тегам:

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