Como posso verificar o conteúdo das pastas para determinados arquivos?

0

Como eu poderia escrever um script para percorrer todas as pastas de um disco rígido, encontrar algum arquivo de vídeo, extraí-lo para a raiz do disco rígido e excluir todo o resto?

    
por Conor Taylor 09.02.2013 / 16:01

1 resposta

4

Normalmente, se você precisar "fazer loop" em um conjunto de arquivos no Linux, não desejará gravar um loop de Bash real (por exemplo, com for ), mas use find . O seguinte deve funcionar para todas as versões de find , e as distribuições Linux vêm com o GNU find , cujo manual você deve definitivamente ler em algum momento.

Tenha cuidado com os seguintes comandos. Se você não sabe o que está fazendo ou não confere os resultados primeiro, você poderá perder de maneira irreversível os dados.

find /mount/drive -type f  \( -iname "*.mp4" -o -iname "*.avi" \) \
-exec echo mv '{}' /mount/drive/ \;

Isto imprimiria uma lista de comandos mv . Quando tiver certeza de que faz o que deseja, remova o echo do comando e execute-o novamente.

Nota:

  • -type f restringirá os resultados a apenas arquivos.
  • find irá sobrescrever arquivos com o mesmo nome sem um aviso. Para evitar colisões, use mv -i , o que solicitaria você em tal caso.
  • Você pode adicionar mais condições a isso para pesquisar outros tipos de arquivo, por exemplo, -o -iname "*.mov" et cetera.

Em uma segunda etapa, excluiremos tudo que não estiver na raiz da unidade. Para fazer isso, precisamos de dois comandos, já que você primeiro deseja excluir todos os arquivos…

find /mount/drive -mindepth 2 -type f

Quando tiver certeza de que isso lista tudo o que você deseja excluir, adicione -delete ao comando. Aqui, mindepth 2 garante que sua raiz (com todos os vídeos nela) permaneça intocada.

Em seguida, localize as pastas vazias restantes:

find /mount/drive -mindepth 1 -depth -type d -empty

Semelhante ao acima, adicione -delete a esse comando para excluir os diretórios vazios.

    
por 09.02.2013 / 17:33