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

У меня есть подпапки с тире (пример 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"
-1
задан 7 February 2018 в 04:28

6 ответов

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

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

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

find [PATH...] -depth -name '*-*' | prename EXPR
0
ответ дан 17 July 2018 в 21:27

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

Переименование порций имен файлов. Повторно в Linux / Ubuntu

Чтобы переименовать файлы, вы используйте команду find в сочетании с командой переименования следующим образом:

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

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

find -type f -execdir rename 's/-/_/' *.jpg '{}' \;
0
ответ дан 17 July 2018 в 21:27

Нет никакого случая для переименования, потому что вы можете просто сделать это с помощью 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 нет лошадей.

2
ответ дан 17 July 2018 в 21:27

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

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

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

find [PATH...] -depth -name '*-*' | prename EXPR
0
ответ дан 23 July 2018 в 22:05
  • 1
    Я думаю, что OP ошибочно , приписывая ошибку rename тому факту, что их каталоги имеют тире в своих именах – steeldriver 6 February 2018 в 20:16

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

Переименование порций имен файлов. Повторно в Linux / Ubuntu

Чтобы переименовать файлы, вы используйте команду find в сочетании с командой переименования следующим образом:

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

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

find -type f -execdir rename 's/-/_/' *.jpg '{}' \;
0
ответ дан 23 July 2018 в 22:05

Нет никакого случая для переименования, потому что вы можете просто сделать это с помощью 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 нет лошадей.

2
ответ дан 23 July 2018 в 22:05
  • 1
    Особенно третья - совершенна, но цель всего этого еще неясна. Для меня, по крайней мере. – PerlDuck 6 February 2018 в 21:14
  • 2
    Это правильный подход IMHO, за исключением того, что вы можете рассмотреть bash -c 'for f; do mv -i -- "$f" "$RANDOM.jpg"; done' bash {} + (для эффективности и избежать расширения {} внутри командной строки). OP также может рассмотреть возможность использования чего-то вроде "$(mktemp --suffix=.jpg --tmpdir=. XXXXXX)" вместо $RANDOM, поскольку последнее не гарантируется быть уникальным. – steeldriver 6 February 2018 в 21:17
  • 3
    Испытывали ли вы эффективность? Что ты получил? IMHO, это действие будет ограничено жестким диском, поэтому попытка чтения и записи одновременно может привести к ухудшению производительности. Это дополнительный уровень сложности, и я научился просто делать это правильно, а затем заботиться о производительности и только, при необходимости. Но меня очень интересуют цифры, поэтому, если вы сделали некоторые измерения, пригласите их! Потому что я часто слышу такие советы в связи с поиском & quot ;; & quot; и +. – user unknown 6 February 2018 в 21:21

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

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