Método 1 - Primeiro se movendo e excluindo
Apenas mova os arquivos para cima em um diretório e exclua-o. Isso manterá a hierarquia de arquivos / pastas contida.
mv ~/Desktop/MyFolder/* ~/Desktop/MyFolder/..
rmdir ~/Desktop/MyFolder
Método 2 - Automatizando em uma função shell
Você pode colocar isso em uma função de shell definida no seu ~/.bash_profile
:
function rmd () {
if [ -d "$1" ]; then
mv "$1"/* "$1"/..
rmdir "$1"
else
echo "$1 is not a directory"
fi
}
Como dito anteriormente, isso excluirá apenas a pasta pai, mantendo a hierarquia de filhos intacta.
Método 3 - Exclusão recursiva
Se você quiser remover recursivamente todas as pastas e apenas manter os arquivos contidos, use o seguinte:
function rmdr () {
if [ -d "$1" ]; then
p="$1"/..
find "$1" -type f -exec mv '{}' "$p" \;
rm -rf "$1"
else
echo "$1 is not a directory"
fi
}
Observe que isso substitui arquivos com nomes duplicados.
Método 4 - Exclusão recursiva com reconhecimento duplicado
Finalmente, se você quiser manter arquivos duplicados, pode verificar se eles já existem. Nesse caso, vamos adicionar um número numérico aleatório. Claro, pode haver métodos muito mais sofisticados do que isso, mas você pode ver para onde isso está indo.
function rmdr () {
if [ -d "$1" ]; then
p="$1"/..
# loop through all files
while IFS= read -r -d '' file; do
filename=$(basename "$file")
# if it already exists, prefix with random number
if [ -f "$p/$filename" ]; then
mv "$file" "$p/$RANDOM-$filename"
# if it doesn't exist, just move
else
mv "$file" "$p"
fi
done < <(find "$1" -type f -print0)
# remove parent directory
rm -rf "$1"
else
echo "$1 is not a directory"
fi
}
Fazer um loop por meio de find
output é explicado aqui .