Необходимо выполнить команду updatedb как суперпользователь. Например,
sudo updatedb
Если в вашей системе используется команда переименования
на основе perl, вы можете сделать что-нибудь вроде
rename -- 's/(\d+)-(\d+)/sprintf("%d-%03d",$1,$2)/e' *.jpg
Тестирование с помощью опций -v
(подробный) и -n
(без опции):
$ rename -vn -- 's/(\d+)-(\d+)/sprintf("%d-%03d",$1,$2)/e' *.jpg
0-10.jpg renamed as 0-010.jpg
0-19.jpg renamed as 0-019.jpg
0-1.jpg renamed as 0-001.jpg
Вот другой подход. Так как вам нужно переименовать только определенное подмножество файлов и так как вы уже знаете, что это такое, просто перечислите их и переименуйте:
for i in {1..99}; do mv -- 0-$i.jpg 0-$(printf '%03d\n' $i).jpg; done
Это перечислит числа от 1 до 99, сохранив каждое значение как $i
. Остальное вас не волнует, так как они уже правильно названы. Затем вы переименовываете 0-$i.jpg
в мягкую версию. Директива printf
%03d
выведет число, добавляющее 0s слева, если оно меньше 3 символов. В результате все проблемные файлы будут переименованы.
другое решение, если у вас нет «переименовать:
for file in *.jpg; do
[ -f "$file" ] || continue #skips if no jpg file present in current dir
echo "${file}" | awk -F'[-.]' '
{ new=sprintf("%03d",$2);
print "echo TESTING mv ", $0," ",$1"-"new"."$3
}'
done | bash
(редактировать: перемещен | bash
, поэтому он вызывается только один раз, а не один раз для каждого файла. И этот быстрый цикл не является дружественным к "странным именам файлов", но его можно обработать дальше (для обработки файлов с пробелами и т. д.)
и удалить 2 слова повторяют ТЕСТИРОВАНИЕ
, чтобы действительно выполнить mv ...
, если вы уверены, что он делает то, что вы хотите.
Если у вас ZSH
Shell, вы можете сделать что-то вроде ниже.
zmv '([0-9])-([0-9]##).(jpg)' '$1-${(l:3::0:)2}.$3'
Тестирование
touch 0-1.jpg
touch 0-23.jpg
touch 0-345.jpg
touch 0-6.jpg
touch 0-05.jpg
Измените оболочку в ZSH
, а если ZMV
не загружено, вы можете сделать Autoload ZMV
.
Теперь вы можете добавить -N
-N флаг в команду ZMV
, чтобы увидеть, что произойдет, если вы выполняете команду ZMV
. Я запускаю команду как,
zmv -n '([0-9])-([0-9]##).(jpg)' '$1-${(l:3::0:)2}.$3'
Вывод - это,
zmv -n '([0-9])-([0-9]##).(jpg)' '$1-${(l:3::0:)2}.$3'
mv -- 0-05.jpg 0-005.jpg
mv -- 0-1.jpg 0-001.jpg
mv -- 0-23.jpg 0-023.jpg
mv -- 0-6.jpg 0-006.jpg
Если вы удовлетворены, что имена файлов переименовываются правильно, вы можете удалить флаг -N
.
Ссылки
Благодаря пользователю GNOUC для разъяснения моих сомнений в этом вопросе, который я разместил в качестве другого вопроса, чтобы получить это решение, и ссылка на ответ GNOUC - это это .