У меня есть подпапки с тире (пример subdir с именем c-d). Мне нужно переименовать все файлы .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"
Вы не знаете, как вы хотите переименовать файлы. Что касается файлов, которые можно переименовать, вы можете использовать find для соответствия всем файлам по вашему желаемому шаблону, содержащему тире:
find [PATH...] -type f -name '*-*' | prename EXPR
Если вы хотите также сопоставить каталоги, вам нужно использовать -depth:
find [PATH...] -depth -name '*-*' | prename EXPR
Я просто пробовал это в подпапках с тире в их имени, и это сработало.
Чтобы переименовать файлы, вы используйте команду find в сочетании с командой переименования следующим образом:
find -type f -execdir rename 's/OriginalText/NewText/' *.jpg '{}' \;
Итак, если вы хотите заменить все тире «-» во всех именах файлов jpg с символами подчеркивания «_», вы должны ввести:
find -type f -execdir rename 's/-/_/' *.jpg '{}' \;
Нет никакого случая для переименования, потому что вы можете просто сделать это с помощью 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"' \;
Однако сделайте резервную копию, будьте осторожны с вашими данными и так далее. Массовые действия с поиском - острый инструмент. Я не несу ответственности.
В этой гонке у AFAIK нет лошадей.
Вы не знаете, как вы хотите переименовать файлы. Что касается файлов, которые нужно переименовать, вы можете использовать find для соответствия всем файлам по вашему желаемому шаблону, содержащему тире:
find [PATH...] -type f -name '*-*' | prename EXPR
Если вы хотите также сопоставить каталоги, вам нужно использовать -depth:
find [PATH...] -depth -name '*-*' | prename EXPR
Я просто пробовал это в подпапках с тире в их имени, и это сработало.
Чтобы переименовать файлы, вы используйте команду find в сочетании с командой переименования следующим образом:
find -type f -execdir rename 's/OriginalText/NewText/' *.jpg '{}' \;
Итак, если вы хотите заменить все тире «-» во всех именах файлов jpg с символами подчеркивания «_», вы должны ввести:
find -type f -execdir rename 's/-/_/' *.jpg '{}' \;
Нет никакого случая для переименования, потому что вы можете просто сделать это с помощью 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"' \;
Однако сделайте резервную копию, будьте осторожны с вашими данными и так далее. Массовые действия с поиском - острый инструмент. Я не несу ответственности.
В этой гонке у AFAIK нет лошадей.