Как переименовать все файлы .jpg во всех подкаталогах, содержащих тире в Linux?

Как переименовать все файлы .jpg во всех подкаталогах, содержащих тире в Linux?

У меня есть подпапки с тире (пример подпапки с именем cd). Мне нужно переименовать все файлы .jpg во всех подпапках. Есть какие-нибудь советы, как это сделать? Я перепробовал много вариантов, но ничего не помогло (я думаю, потому что мои подпапки содержат тире -) Спасибо, ребята! :)

я пытался

find -name '*.jpg' -exec rename $RANDOM.jpg $RANDOM.jpg {} \;

но получение

(Missing operator before jpg?) syntax error at (user-supplied code)
line 3, near "2635.jpg" Bareword found where operator expected at
(eval 4) line 1, near "#line 1 2635.jpg"

решение1

Нет необходимости в переименовании, поскольку вы можете просто сделать это с помощью mv.

find -name '*.jpg' -exec bash -c 'mv -i "{}" "$RANDOM.jpg"' \;

mv -i означает интерактивный. Он спрашивает перед перезаписью.

Это не тестируется глубоко, просто ad hoc, чтобы убедиться, что файлы получат разные имена. Немного больше тестирования будет:

find -name '*.jpg' -exec echo bash -c 'mv -i "{}" "$RANDOM.jpg"' \;

Однако это поместит все файлы в текущий каталог. Может быть, использование -execdir — это вариант?

find -name '*.jpg' -execdir bash -c 'mv -i "{}" "$RANDOM.jpg"' \;

Однако делайте резервную копию, будьте осторожны с вашими данными и т. д. Массовые действия с find — это острый инструмент. Я не несу ответственности.

Насколько мне известно, в этой гонке лошадей нет.

решение2

Вам неясно,каквы хотите переименовать файлы. Насколькокоторыйфайлы для переименования можно использовать findдля сопоставления всех файлов по желаемому шаблону, содержащему тире:

find [PATH...] -type f -name '*-*' | prename EXPR

Если вы хотите сопоставить и каталоги, вам нужно использовать опцию -depth:

find [PATH...] -depth -name '*-*' | prename EXPR

решение3

Я только что попробовал это сделать с подпапками, в имени которых есть тире, и это сработало.

Переименование частей имен файлов в Linux/Ubuntu

Чтобы переименовать файлы, используйтенаходитькоманда совместно спереименоватькоманда вроде этой:

find -type f -execdir rename 's/OriginalText/NewText/' *.jpg '{}' \;

Итак, если вы хотите заменить все дефисы «-» во всех именах файлов jpg на подчеркивания «_», то вам нужно ввести:

find -type f -execdir rename 's/-/_/' *.jpg '{}' \;

Связанный контент