2016-11-23 2 views
-2

У меня есть имена файлов (из плиток изображений), состоящие из двух чисел, разделенных символом подчеркивания, например.Добавить ведущие нули дважды в filename

142_27.jpg 
7_39.jpg 
1_120.jpg 

Как я могу (в linux) добавлять ведущие нули в оба эти числа? То, что я хочу, это имена файлов, как

142_027.jpg 
007_039.jpg 
001_120.jpg 
+0

'perldoc -f sprintf' – toolic

+0

Вы ищете переименование файлов или изменение текста в файле? – Sundeep

+0

Переименовать файлы. Я нашел много примеров добавления нулей в начало имени файла, но здесь я хочу нули в двух местах (в начале и после подчеркивания). – user1583209

ответ

1

С perl на основе rename команды

$ touch 142_27.jpg 7_39.jpg 1_120.jpg 
$ rename -n 's/\d+/sprintf "%03d", $&/ge' *.jpg 
rename(1_120.jpg, 001_120.jpg) 
rename(142_27.jpg, 142_027.jpg) 
rename(7_39.jpg, 007_039.jpg) 

Опция -n для сухого хода, удалите его для фактического переименования


Если perl на основе rename команда недоступна:

$ for f in *.jpg; do echo mv "$f" "$(echo "$f" | perl -pe 's/\d+/sprintf "%03d", $&/ge')"; done 
mv 1_120.jpg 001_120.jpg 
mv 142_27.jpg 142_027.jpg 
mv 7_39.jpg 007_039.jpg 

Изменить echo mv просто mv раз всухую кажется, хорошо

2

Вы можете использовать одну awk команду имен файлов в формате с ведущими нулями, используя printf:

for f in *.jpg; do 
    echo mv "$f" $(awk -F '[_.]' '{printf "%03d_%03d.%s", $1, $2, $3}' <<< "$f") 
done 

Это будет:

mv 142_27.jpg 142_027.jpg 
mv 1_120.jpg 001_120.jpg 
mv 7_39.jpg 007_039.jpg 

Как только вы удовлетворены результатом, удалите echo до команды mv.

0

Вы можете сделать это с немного оболочки сценария с использованием СЭД:

for i in *.jpg; 
do 
    new=`echo "$i" | sed -n -e '{ s/^\([0-9]\{0,3\}\)_\([0-9]\{0,3\}\).jpg/000\1_000\2.jpg/ }; 
    {s/\([0-9]*\)\([0-9]\{3\}\)_\([0-9]*\)\([0-9]\{3\}\).jpg/\2_\4.jpg/p };'`; 
    mv "$i" "$new"; 
done; 

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

Смежные вопросы