переименовывать файлы со сдвигом в числах

Я хочу переименовать группу файлов, которые называются IMG0189.jpeg IMG0190.jpeg и т. Д., Во что-то вроде IMG01.jpeg IMG02.jpeg и т. Д. Соответственно. Есть ли способ сделать это с помощью команды переименования? Или что-нибудь еще? Я попытался прочитать руководство, но оно очень краткое и не дает представления о сдвиге чисел.

2
задан 16 June 2012 в 01:12

1 ответ

Как насчет

ls > /tmp/list ; seq -w `ls | wc -l` | paste /tmp/list - | awk -F\\t '{ print $1, "IMG"$2".jpeg"}' | xargs -n2 mv
  • Вывести список файлов и перенаправить список во временный файл /tmp/list
  • Написать seq число чисел, дополненное нулями, равно количеству файлов для STDOUT
    • Количество файлов определяется путем перечисления файлов и передачи в приложение wc (количество слов) в режиме «линий»
  • [ 1118] paste последовательность чисел из предыдущей команды в правой части списка файлов из /tmp/list
    • Вставить склеивает два файла вместе в виде столбцов, разделенных символом TAB
    • [ 1138] Передайте вывод в следующую программу
  • Используйте небольшую программу awk для переформатирования этих двух полей
    • Разделители, указанные как табуляция (\t - первая косая черта должна выходить из второго)
    • Первое поле $1, имя исходного файла печатается как есть
    • Второе поле $2, порядковый номер, напечатанный с префиксом IMG и суффикс .jpeg
    • Передать вывод в следующую программу
  • Используя xargs, передайте пары аргументов в mv (команда перемещения / переименования)
    • -n2 означает, что он пропустит 2 из них одновременно

Обратите внимание, это предполагает, что ваши исходные имена файлов не содержат пробелов.

Если вы хотите начать с номера, отличного от 1, вам нужно манипулировать параметрами seq; например,

COUNT=`ls | wc -l` ; FIRST=32 ; LAST=$(($FIRST + $COUNT)) ; seq -w $FIRST $LAST
0
ответ дан 16 June 2012 в 01:12

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

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