
У меня есть подпапки с тире (пример подпапки с именем 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 '{}' \;