Atravessa o sistema de arquivos e move arquivos

0

Eu preciso escrever um script que vá para uma lista de diretórios e mova os arquivos dos tipos de arquivo cretin para outro diretório.

Com o código abaixo, posso iterar todas as pastas de um diretório e imprimir seus nomes. Eu acho que vou precisar 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 /

    
por Andrew Pullins 14.03.2015 / 07:03

2 respostas

0

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 será como a marca -n está definida, caso contrário, o segundo substituirá o primeiro e a perda do primeiro arquivo. Isso não copiará nenhum arquivo no sub-diretório

Raspe esse uso

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

Mas terá o mesmo problema com arquivos de mesmo nome

Se você quiser duplicar o 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

Esse loop não será quebrado se o diretório / desired / estiver no diretório / search /. Eu fiz isso fora do topo da minha cabeça a única parte que eu estou preocupado com o tempo pode precisar do achado | wc entre parênteses talvez com $ na frente Isso poderia ser melhorado ainda mais pela verificação de erros e ter o diretório .png / search / directory / desired / como argumentos

    
por nico 14.03.2015 / 07:27
0

Isso deve ser feito:

#!/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 arquivos .png desses diretórios para o diretório desejado. Como estamos usando os caminhos absolutos aqui, você pode executar esse script de qualquer local.

    
por heemayl 15.03.2015 / 00:27