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

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

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

7 ответов

Как насчет

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 (число слов) в режиме «линии»
  • paste последовательность чисел из предыдущей команды в правую сторону списка файлов из /tmp/list. Вставить палочки два файла вместе в виде столбцов, разделенных символом TAB. Вывести выход в следующую программу
  • Использовать небольшой awk, чтобы переформатировать эти два поля. Сепараторы, указанные в качестве вкладки (\t - первая косая черта, чтобы избежать второй). Первое поле $1, исходное имя файла, напечатанное как: - Второе поле $2, порядковый номер, напечатанный с префиксом IMG и суффикс .jpeg. Выполните вывод следующей программы
  • Используя xargs, передайте пары аргументов в команду mv (команда move / rename) -n2, это означает, что он будет передавать 2 из них за раз

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

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

COUNT=`ls | wc -l` ; FIRST=32 ; LAST=$(($FIRST + $COUNT)) ; seq -w $FIRST $LAST
5
ответ дан 25 July 2018 в 18:28

Как насчет

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 (число слов) в режиме «линии»
  • paste последовательность чисел из предыдущей команды в правую сторону списка файлов из /tmp/list. Вставить палочки два файла вместе в виде столбцов, разделенных символом TAB. Вывести выход в следующую программу
  • Использовать небольшой awk, чтобы переформатировать эти два поля. Сепараторы, указанные в качестве вкладки (\t - первая косая черта, чтобы избежать второй). Первое поле $1, исходное имя файла, напечатанное как: - Второе поле $2, порядковый номер, напечатанный с префиксом IMG и суффикс .jpeg. Выполните вывод следующей программы
  • Используя xargs, передайте пары аргументов в команду mv (команда move / rename) -n2, это означает, что он будет передавать 2 из них за раз

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

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

COUNT=`ls | wc -l` ; FIRST=32 ; LAST=$(($FIRST + $COUNT)) ; seq -w $FIRST $LAST
5
ответ дан 2 August 2018 в 00:40

Как насчет

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 (число слов) в режиме «линии»
  • paste последовательность чисел из предыдущей команды в правую сторону списка файлов из /tmp/list. Вставить палочки два файла вместе в виде столбцов, разделенных символом TAB. Вывести выход в следующую программу
  • Использовать небольшой awk, чтобы переформатировать эти два поля. Сепараторы, указанные в качестве вкладки (\t - первая косая черта, чтобы избежать второй). Первое поле $1, исходное имя файла, напечатанное как: - Второе поле $2, порядковый номер, напечатанный с префиксом IMG и суффикс .jpeg. Выполните вывод следующей программы
  • Используя xargs, передайте пары аргументов в команду mv (команда move / rename) -n2, это означает, что он будет передавать 2 из них за раз

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

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

COUNT=`ls | wc -l` ; FIRST=32 ; LAST=$(($FIRST + $COUNT)) ; seq -w $FIRST $LAST
5
ответ дан 4 August 2018 в 16:10

Как насчет

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 (число слов) в режиме «линии»
  • paste последовательность чисел из предыдущей команды в правую сторону списка файлов из /tmp/list. Вставить палочки два файла вместе в виде столбцов, разделенных символом TAB. Вывести выход в следующую программу
  • Использовать небольшой awk, чтобы переформатировать эти два поля. Сепараторы, указанные в качестве вкладки (\t - первая косая черта, чтобы избежать второй). Первое поле $1, исходное имя файла, напечатанное как: - Второе поле $2, порядковый номер, напечатанный с префиксом IMG и суффикс .jpeg. Выполните вывод следующей программы
  • Используя xargs, передайте пары аргументов в команду mv (команда move / rename) -n2, это означает, что он будет передавать 2 из них за раз

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

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

COUNT=`ls | wc -l` ; FIRST=32 ; LAST=$(($FIRST + $COUNT)) ; seq -w $FIRST $LAST
5
ответ дан 6 August 2018 в 00:48

Как насчет

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 (число слов) в режиме «линии»
  • paste последовательность чисел из предыдущей команды в правую сторону списка файлов из /tmp/list. Вставить палочки два файла вместе в виде столбцов, разделенных символом TAB. Вывести выход в следующую программу
  • Использовать небольшой awk, чтобы переформатировать эти два поля. Сепараторы, указанные в качестве вкладки (\t - первая косая черта, чтобы избежать второй). Первое поле $1, исходное имя файла, напечатанное как: - Второе поле $2, порядковый номер, напечатанный с префиксом IMG и суффикс .jpeg. Выполните вывод следующей программы
  • Используя xargs, передайте пары аргументов в команду mv (команда move / rename) -n2, это означает, что он будет передавать 2 из них за раз

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

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

COUNT=`ls | wc -l` ; FIRST=32 ; LAST=$(($FIRST + $COUNT)) ; seq -w $FIRST $LAST
5
ответ дан 7 August 2018 в 18:14

Как насчет

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 (число слов) в режиме «линии»
  • paste последовательность чисел из предыдущей команды в правую сторону списка файлов из /tmp/list. Вставить палочки два файла вместе в виде столбцов, разделенных символом TAB. Вывести выход в следующую программу
  • Использовать небольшой awk, чтобы переформатировать эти два поля. Сепараторы, указанные в качестве вкладки (\t - первая косая черта, чтобы избежать второй). Первое поле $1, исходное имя файла, напечатанное как: - Второе поле $2, порядковый номер, напечатанный с префиксом IMG и суффикс .jpeg. Выполните вывод следующей программы
  • Используя xargs, передайте пары аргументов в команду mv (команда move / rename) -n2, это означает, что он будет передавать 2 из них за раз

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

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

COUNT=`ls | wc -l` ; FIRST=32 ; LAST=$(($FIRST + $COUNT)) ; seq -w $FIRST $LAST
5
ответ дан 10 August 2018 в 06:58

Как насчет

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 (число слов) в режиме «линии»
  • paste последовательность чисел из предыдущей команды в правую сторону списка файлов из /tmp/list. Вставить палочки два файла вместе в виде столбцов, разделенных символом TAB. Вывести выход в следующую программу
  • Использовать небольшой awk, чтобы переформатировать эти два поля. Сепараторы, указанные в качестве вкладки (\t - первая косая черта, чтобы избежать второй). Первое поле $1, исходное имя файла, напечатанное как: - Второе поле $2, порядковый номер, напечатанный с префиксом IMG и суффикс .jpeg. Выполните вывод следующей программы
  • Используя xargs, передайте пары аргументов в команду mv (команда move / rename) -n2, это означает, что он будет передавать 2 из них за раз

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

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

COUNT=`ls | wc -l` ; FIRST=32 ; LAST=$(($FIRST + $COUNT)) ; seq -w $FIRST $LAST
5
ответ дан 15 August 2018 в 18:56
  • 1
    Удивительно, что я точно делаю то, что хочу. И большое спасибо за великое объяснение. Есть ли способ, которым я могу сказать, чтобы начать нумерацию, например, с 01, а затем до 10,11 и т. Д.? Кроме того, я хотел бы знать, могу ли я начать нумерацию с произвольного числа, например из 32! – Keivan 18 June 2012 в 01:32
  • 2
    & Quot; -w " параметр на seq позволяет автоматически набирать необходимое количество нулей для сохранения последовательности, которую вы просили, так что это уже покрыто. См. Править для начала с разным номером. – Adrian 18 June 2012 в 13:59

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

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