J'essaie de supprimer tous les fichiers et sous-répertoires d'un répertoire. J'ai utilisé rm -r
pour supprimer tous les fichiers, mais je veux supprimer tous les fichiers et les sous-répertoires, à l'exclusion du répertoire supérieur lui-même.
Par exemple, j'ai un répertoire supérieur comme images
. Il contient les fichiers header.png
, footer.png
et un sous-répertoire.
Maintenant, je veux supprimer header.png
, footer.png
et le sous-répertoire, mais pas images
.
Comment puis-je faire cela sous Linux?
Si votre répertoire de niveau supérieur s'appelle images
, exécutez rm -r images/*
. Celui-ci utilise l'opérateur Shell glob *
courir rm -r
sur chaque fichier ou répertoire dans images
.
Pour supprimer des fichiers cachés, vous devez spécifier:
rm -r images/* images/.*
Avec des coquilles dont les globes incluent .
et ..
, cela entraînera une erreur comme
rm: cannot remove `.' directory `images/.'
rm: cannot remove `..' directory `images/..'
mais il supprimera les fichiers cachés.
Une approche sans message d'erreur consiste à utiliser find/delete avec mindepth. C'est gnu-find.
find images -mindepth 1 -delete
Votre trouvaille peut manquer de -mindepth
ou -delete
prédicat, auquel cas vous pourriez faire:
find images/. ! -name . -Prune -exec rm -rf {} +
Pour supprimer tous les fichiers et répertoires (y compris les masqués ceux) dans un répertoire, vous pouvez essayer ce qui suit:
utilisation ls -Ab
pour faire correspondre tous les fichiers/répertoires
cd dir_name && rm -rf `ls -Ab`
utilisez find
pour faire correspondre tous les fichiers/répertoires
find dir_name -mindepth 1 -delete
ou, si votre find
ne prend pas en charge -delete
:
find dir_name -mindepth 1 -exec rm -rf {}
supprimez le dossier, puis recréez-le
rm -rf dir_name && mkdir dir_name
en bash,
shopt -s dotglob
rm -rf dir_name/*
Pour supprimer tous les fichiers réguliers de manière récursive dans un répertoire, cette commande (en supposant GNU ou FreeBSD find
) est assez bonne:
find . -type f -delete
Cela laisse tous les fichiers non réguliers comme des liens symboliques (qu'ils pointent vers des fichiers normaux ou non), des répertoires, des fifos, des sockets, des périphériques ...
Voir également:
find . ! -type d -delete
pour supprimer des fichiers de tout type sauf répertoire.
Essayez cette version:
rm -r test/*
J'utilise la commande find
ici:
Étape 1: Trouvez tous les fichiers et supprimez-les:
find /path/to/directory/ -type f -exec rm {} \;
Exemple:
find /home/user/Desktop/images/ -type f -exec rm {} \;
Étape 2: Trouvez tous les sous-répertoires et supprimez-les:
find /path/to/directory/ -type d -exec rm -R {} \;
La question était de vider un répertoire = supprimer le contenu d'un répertoire, y compris les fichiers cachés, mais pas le répertoire lui-même. La commande find avec -mindepth 1 est en fait la bonne façon de procéder, mais pour éviter les messages d'erreur, elle doit être jointe avec -maxdepth 1:
find /path/to/dir -mindepth 1 -maxdepth 1 -exec rm -rf '{}' \;
la syntaxe de rm est:
rm [OPTION]... FILE...
Vous devez donc indiquer explicitement le chemin approprié, par exemple.
rm -r sub_dir/
Vous pouvez supprimer le répertoire à l'aide de la commande suivante:
Sudo rm -r directoryname1/2/3/*
Il supprimera tout le répertoire après 3/*.
Exemple Sudo rm -r Téléchargements/chanson/*
Ce sera supprimer tous les fichiers qui sont dans Downloads/song
.
Cela fonctionne parfaitement pour moi, testé plusieurs variantes travaillées à chaque fois.
À partir du répertoire contenant le répertoire images.
rm -frd ./images/*
avant:
images/
|_ header.png
|_ footer.png
|_ subdir/
après:
images/
Pour supprimer tous les fichiers et sous-répertoires du répertoire courant, y compris ceux cachés, sans message d'erreur :
rm -rf .[^.] .??* *
Ou, à partir du répertoire parent:
rm -rf images/.[^.] images/.??* images/*