Batch move todos os arquivos dos subdiretórios para o diretório pai, mas os arquivos têm o mesmo nome

1

Eu tenho muitos arquivos em subdiretórios que gostaria de ter todos movidos para o diretório pai.

Ex:

20150530XXXX/1.jpg
20150530XXXX/2.jpg
20150530XXXX/3.jpg
20150530XXXX/4.jpg
20150531XXXX/1.jpg
20150531XXXX/2.jpg
20150531XXXX/3.jpg
20150531XXXX/4.jpg

Eu encontrei em outra pergunta no stackexchange o seguinte comando:

find ./ -mindepth 2 -type f -exec mv -t A {} +

no entanto, isso parece substituir os arquivos de imagem porque cada um tem o mesmo nome ( 1-4.jpg ). Existe uma maneira de concatenar o nome do subdiretório com o nome do arquivo, por exemplo, mover 20150531XXXX/4.jpg para ./20150531XXXX_4.jpg ?

    
por brett 28.06.2015 / 21:36

1 resposta

5

Se você tiver a versão perl de rename (denominada prename em algumas distribuições):

find . -type f -mindepth 2 -name '*.jpg' -exec rename -n 's!/([^/]+)$!_$1!' {} +

Isso só mostrará o que o comando fará. Se você está feliz com isso, solte a opção -n para realmente renomear os arquivos (a renomeação atual não imprime nada).

    
por 28.06.2015 / 22:02

Tags