Como renomear todos os arquivos .jpg em todos os subdiretórios que contêm traço no Linux?

Como renomear todos os arquivos .jpg em todos os subdiretórios que contêm traço no Linux?

Tenho subpastas com travessões (exemplo de subdiretório com nome cd). Preciso renomear todos os arquivos .jpg em todos os subdiretórios. Alguma dica de como fazer isso? Eu tentei muitas opções, mas nada ajudou (acho que porque minhas subpastas contêm travessões -) Obrigado pessoal! :)

eu tentei

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

mas conseguindo

(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"

Responder1

Não há motivo para renomear, porque você pode fazer isso apenas com mv.

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

mv -i significa interativo. Ele pergunta antes de substituir.

Isso não é testado em profundidade, apenas ad hoc, para garantir que os arquivos recebam nomes diferentes. Um pouco mais de teste seria:

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

No entanto, isso colocará todos os arquivos no diretório atual. Talvez usar -execdir seja uma opção?

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

Porém, faça um backup, tome cuidado com seus dados e assim por diante. Ações em massa com achados são um instrumento afiado. Eu não assumo nenhuma responsabilidade.

As corridas AFAIK não têm cavalos nesta corrida.

Responder2

Você não está claro sobrecomovocê deseja que os arquivos sejam renomeados. Tão longe quantoqualarquivos para renomear você pode usar findpara combinar todos os arquivos de acordo com o padrão desejado contendo um traço:

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

Se você quiser combinar diretórios também, você precisa usar a -depthopção:

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

Responder3

Eu apenas tentei isso em subpastas com um travessão no nome e funcionou.

Renomeando partes de nomes de arquivos de forma recusiva no Linux/Ubuntu

Para renomear arquivos, você usa oencontrarcomando em conjunto com orenomearcomando assim:

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

Portanto, se você quiser substituir todos os travessões "-" em todos os nomes de arquivos jpg por sublinhados "_", digite:

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

informação relacionada