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 frestringirá os resultados a apenas arquivos. -
findirá sobrescrever arquivos com o mesmo nome sem um aviso. Para evitar colisões, usemv -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.