Bash Массовое переименование папок с 3-значным префиксом и разделителем

У меня есть ряд папок, которые я хотел бы переименовать с номером префикса и текстом с разделителями. Например:

% ls
blue        green   keyboard    pictures    red     tango       yellow
flyer       gum     orange      pop         runner  videos

переименовать в:

% ls
001-blue        002-green       003-keyboard    004-pictures    005-red     006-tango       007-yellow
008-flyer       009-gum     010-orange      011-pop     012-runner      013-videos

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

% i=0; for x in *; do; mv "$x" "00$i-$x" ; i=$((i + 1)); done

Я знаю, что проблема в команде mv из-за жестко запрограммированного 00 в имени получателя, но я не знаю, как изменить его на трехзначное эксклюзивное имя получателя с помощью переменной $i.

Заранее спасибо.

printf "%03d-%s\n" $i, $fname поможет вам начать. Просто повторите результаты в терминале, пока не убедитесь, что он работает должным образом, your stuff script | bash чтобы переименовать их все. Удачи.
shellter 20.12.2020 21:57
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
1
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте этот однострочный Perl:

perl -le '$cmd = sprintf( "mv $_ %03d-$_", ++$i ) and system $cmd for @ARGV;'

Чтобы выполнить пробный запуск и распечатать нужные команды без переименования файлов, используйте print вместо system, например:

perl -le '$cmd = sprintf( "mv $_ %03d-$_", ++$i ) and print $cmd for @ARGV;'

Однострочник Perl использует следующие флаги командной строки:
-e: говорит Perl искать код в строке, а не в файле.
-l: удалите разделитель строк ввода (по умолчанию "\n" в *NIX) перед выполнением кода в строке и добавьте его при печати.

См. также документы для sprintf.

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