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, 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.