Как переименовать файлы в монотонно увеличивающиеся порядковые номера с последующим суффиксом?

434
Gabrijel Šimunović

Я хочу переименовать все файлы в определенном каталоге в число, за которым следует суффикс. Например, я хочу переименовать все файлы * .jpg в 1.jpg, 2.jpg, 3.jpg, ...

Я думал об использовании findдля этого (что-то вроде find ./*.jpg --exec mv {} <number_of_iteration>.jpg), но я не знаю, что я бы вставил как <number_of_iteration>.

Могу ли я использовать findдля этого? Или есть лучший способ?

0
Привет, Габриэль. Я изменил ваш вопрос, чтобы сосредоточиться на проблеме, которую вы, похоже, хотите решить, а не на предложенном вами решении, которое может или не может быть лучшим способом сделать это. Если вы чувствуете, что при этом я изменил ваше намерение, не стесняйтесь либо ** [редактировать] далее ** (рекомендуется), либо полностью откатить редактирование (нажмите ссылку "отредактировано ... назад" над моим именем и нажмите «Откат» над ревизией, на которую вы хотите откатиться). a CVn 9 лет назад 0

1 ответ на вопрос

1
AFH

You would need to maintain the iteration separately. For example, use a script move_count containing the following:-

[ -w ~/MoveCount ] || echo 0 >~/MoveCount read count <~/MoveCount ((++count)) echo $count >~/MoveCount mv "$1" "$count.$" 

Then your find command would become:

find -iname "*.jpg" -exec bash -c "move_count {}" \; 

Note that bash is called explicitly because the default sh doesn't understand some of the syntax I have used. Alternatively, make #!/bin/bash the first line of move_count.

Не могли бы вы так же просто поместить `#! / Bin / bash` вверху и покончить с` bash -c` в `-exec`? a CVn 9 лет назад 0
Да, конечно. Я привык к использованию `bash -c` после того, как у меня ранее была другая проблема с использованием` find -exec` с командным файлом. Я не могу вспомнить детали, но, возможно, это было связано с тем, где параметры были расширены, и это здесь не применимо. AFH 9 лет назад 0
Я обновил свой ответ и удалил `.jpg` из вызова` move_count`: мой первый черновик использовал второй параметр в качестве расширения, но затем я изменил его, чтобы извлечь расширение из первого параметра, поскольку это сохраняет исходный случай , AFH 9 лет назад 0