copiar arquivos recursivamente sem preservar diretórios

1

Eu tenho um monte de diretórios que contêm arquivos MP3 dentro. Esses diretórios não contêm outros diretórios internos.

Como excluo toda a estrutura de diretórios sem excluir os arquivos?

Isso basicamente seria mover todos os arquivos encontrados dentro desses diretórios para o diretório atual. O diretório atual é o diretório onde os outros diretórios estão.

    
por SpaceDog 25.03.2018 / 17:17

2 respostas

1

parent="$PWD"
for dir in *; do
    test -d "$dir" || continue
    pushd "$dir" || continue
    mv -i -- * "$parent"
    popd
    rmdir "$dir"
done
    
por 25.03.2018 / 17:29
1

Com find e único linear:

find . -mindepth 2 -type f -execdir sh -c 'mv -vt ../ "$@" ; rmdir "$PWD"' _ {} +
  • -mindepth 2 permitirá que o comando find ignore os arquivos dos diretórios atuais.
  • -execdir isso é importante aqui, e isso faz com find altere o diretório atual para o diretório em que um arquivo foi encontrado e os comandos dentro dele serão executados no próprio diretório.

  • mv -vt ../ "$@" , isso será expandido para mv -vt ../ "file1" "file 2" "..." "fileN"

  • rmdir "$PWD" excluirá o diretório onde -execdir está lá, o qual será executado depois que todos os arquivos forem migrados para o parentDirectory .

Ba cuidado você não irá sobrescrever os arquivos com o mesmo nome do arquivo ao mover para o caminho de destino.

    
por 25.03.2018 / 17:42