Percorra o sistema de arquivos e mova arquivos

Percorra o sistema de arquivos e mova arquivos

Preciso escrever um script que irá para uma lista de diretórios e, em seguida, mover arquivos do tipo cretin para outro diretório.

Com o código abaixo consigo iterar todas as pastas de um diretório e imprimir seus nomes. Acho que precisarei entrar e sair dessas pastas.

for d in */
do
  echo "$d"
done

O código abaixo irá iterar sobre cada arquivo .png e movê-lo para o diretório desejado.

for file in *.png
 do
    mv "$file" /desired/directory
done

agora, por algum motivo, quando coloco o segundo bloco de código no primeiro, recebo esta saída:

mv: cannot stat ‘*.png’: No such file or directory

Como faço para percorrer e mover cada arquivo? Eu gostaria de colocar este script na raiz do /search/directory/

Responder1

for d in */
do
 mv - n *.png /desired/directory/
done

Haverá um problema com arquivos com o mesmo nome que o primeiro será gravado e o seguinte não, pois a tag -n está definida, caso contrário o segundo substituiria o primeiro e perderia o primeiro arquivo. Isso não copiará nenhum arquivo no sub subdiretório

Raspe esse uso

find /search/directory/ -inane "*.png" -exce mv -n {} /desired/directory/ \;

Mas terá o mesmo problema com arquivos com o mesmo nome

Se você quiser duplicatos com arquivo nomeado, por exemplo. Pic.png 1Pic.png 2Pic.png ect

dup=1
find /search/directory/ -inane "*.png" -exce mv -n {} /desired/directory/ \;
while(find /search/directory/ -inane "*.png" | wc -l !=0)
  find /search/directory/ -inane "*.png" -exce mv -n {} /desired/directory/$dup$(basename {}) \;
    dup++
done

Este loop não será interrompido se /desired/directory estiver em /search/directory. Eu fiz isso de cabeça, a única parte que me preocupa é que a condição while pode precisar do find | wc entre colchetes talvez com $ na frente Isso pode ser melhorado pela verificação de erros e ter .png /search/directory /desired/directory como argumentos

Responder2

Isso deve fazer:

#!/bin/bash
for dir in /full/path/to/recup_Dir.{1..976}; do
mv "$dir"/*.png /full/path/to/desired/directory/
done

Aqui estamos percorrendo os diretórios de origem e copiando todos os .pngarquivos desses diretórios para o diretório desejado. Como estamos usando caminhos absolutos aqui, você pode executar este script de qualquer local.

informação relacionada