Disons que j'ai un arbre de répertoire comme ceci:
FOLDER:
file1
file2
file3
Subfolder1:
file1
file2
Subfolder2:
file1
file2
Si j’utilisais rm -r FOLDER/*
, tout le contenu de FOLDER serait supprimé, y compris les sous-répertoires. Comment puis-je supprimer tous les fichiers de FOLDER et de ses sous-répertoires sans supprimer les répertoires actuels?
Ce que vous essayez de faire est la suppression récursive. Pour cela, vous avez besoin d’un outil récursif, tel que find
.
find FOLDER -type f -delete
Avec bash
name__:
shopt -s globstar ## Enables recursive globbing
for f in FOLDER/**/*; do [[ -f $f ]] && echo rm -- "$f"; done
Ici, itératif sur les noms de fichiers étendus globaux, et ne supprimant que les fichiers.
Ce qui précède correspond à un essai à blanc. Si vous êtes satisfait des modifications à apporter, supprimez echo
pour la suppression effective:
for f in FOLDER/**/*; do [[ -f $f ]] && rm -- "$f"; done
Enfin, désélectionnez globstar
name__:
shopt -u globstar
Avec zsh
name__, exploitant le qualificatif glob:
echo -- FOLDER/**/*(.)
(.)
est un qualificatif de glob, qui limite les extensions de glob à seulement des fichiers normaux.
Ce qui précède n’imprimera que les noms de fichiers, pour une suppression effective:
rm -- FOLDER/**/*(.)
Si votre version de find
ne prend pas en charge -delete
, vous pouvez utiliser ce qui suit pour supprimer tous les fichiers du répertoire en cours et des répertoires inférieurs.
find . ! -type d -exec rm '{}' \;