parent="$PWD"
for dir in *; do
test -d "$dir" || continue
pushd "$dir" || continue
mv -i -- * "$parent"
popd
rmdir "$dir"
done
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.
parent="$PWD"
for dir in *; do
test -d "$dir" || continue
pushd "$dir" || continue
mv -i -- * "$parent"
popd
rmdir "$dir"
done
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.