Como renomear todos os arquivos .jpg em todos os subdiretórios que contenham traço no linux? [fechadas]

-1

Eu tenho subpastas com traços (exemplo subdir com nome c-d). Eu 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 traços -) Obrigado rapazes! :)

Eu tentei

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

mas recebendo

(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"
    
por Jane Farrow 06.02.2018 / 14:52

3 respostas

2

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

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

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

Isso não é testet 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 usando -execdir é uma opção?

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

No entanto, faça um backup, tenha cuidado com seus dados e assim por diante. Ações de massa com achado são um instrumento afiado. Eu não me responsabilizo.

Os traços do AFAIK não têm cavalos nesta corrida.

    
por user unknown 06.02.2018 / 18:01
0

Você não está claro sobre como deseja que os arquivos sejam renomeados. Tanto quanto quais arquivos para renomear você pode usar find para 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 corresponder diretórios também, você precisa usar a opção -depth :

find [PATH...] -depth -name '*-*' | prename EXPR
    
por David Foerster 06.02.2018 / 16:47
0

Eu apenas tentei isso em subpastas com um traço no nome deles, e funcionou.

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

Para renomear arquivos, use o comando find em conjunto com o comando renomear da seguinte forma:

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

Então, se você quiser substituir todos os traços "-" em todos os nomes de arquivos jpg com sublinhados "_", digite:

find -type f -execdir rename 's/-/_/' *.jpg '{}' \;
    
por SunnyDaze 07.02.2018 / 04:02