Le plus proche que j'ai eu est
# rm /path/to/directory/*.*
mais cela ne marche pas pour les fichiers sans extension ...
Le plus proche que j'ai eu est
# rm /path/to/directory/*.*
mais cela ne marche pas pour les fichiers sans extension ...
Réponses:
Linux n'utilise pas d'extensions. Il appartient au créateur du fichier de décider s’il souhaite que le nom porte une extension. Linux examine le premier octet pour savoir quel type de fichier il traite.
Pour tout supprimer dans un répertoire, utilisez:
rm /path/to/directory/*
Vous pouvez utiliser l' -r
option, par exemple:
rm -r /path/to/directory/*
pour supprimer également tous les sous-répertoires (ainsi que tout leur contenu) du répertoire dont vous supprimez le contenu. Sinon, une erreur s'affichera pour vous informer que le répertoire n'est pas supprimé.
all files
;) *.*
signifie tous les fichiers contenant .
quelque part dans le nom
*a*
signifie zéro ou plusieurs caractères, suivis de a
suivis de zéro ou plus de caractères. Il égalerait les noms de fichiers happy
, apple
, a
ou la
.
Pour supprimer le dossier avec tout son contenu ( y compris tous les dossiers intérieurs ):
rm -rf /path/to/directory
Pour supprimer tout le contenu du dossier ( y compris tous les dossiers intérieurs ) mais pas le dossier lui-même:
rm -rf /path/to/directory/*
ou
rm -rf /path/to/directory/{*,.*}
si vous voulez vous assurer que les fichiers / répertoires cachés sont également supprimés.
Pour supprimer tous les "fichiers" de l'intérieur d'un dossier ( sans supprimer les dossiers intérieurs ):
rm -f /path/to/directory/{*,.*}
Attention : si vous avez des espaces dans votre chemin, veillez à toujours utiliser des guillemets.
rm -rf /path/to the/directory/*
équivaut à 2 rm -rf
appels séparés :
rm -rf /path/to
rm -rf the/directory/*
Pour éviter ce problème, vous pouvez utiliser '
des guillemets simples '
( ne pas développer les variables shell) ou des "
doubles guillemets "
( développer les variables shell):
rm -rf "/path/to the/directory/"*
Où:
rm
- signifie " enlever "-f
- signifie " force ", ce qui est utile lorsque vous ne souhaitez pas être invité / demandé si vous souhaitez supprimer une archive, par exemple.-r
- signifie " récursif ", ce qui signifie que vous voulez consulter tous les dossiers de manière récursive et tout supprimer.rm -rf /path/to/directory/*
ne supprime pas un fichier caché dans le dossier, par exemple .htaccess
. Peut rm -rf /path/to/directory/.
- être ? Je n'ai pas essayé.
rm -rf /path/to/directory/.*
ne supprime que les fichiers cachés du répertoire spécifié. En regardant le commentaire de @danjjl sur la réponse de @Rinzwind, pour supprimer également les fichiers cachés, exécutez-les shopt -s dotglob
avant d'exécuter rm -rf /path/to/directory/*
.
rm -rf /path/to/directory/.*
sur mon système, la suppression d’éléments dans /path/to
. Heureusement, je venais de sauvegarder toutes mes données sur un disque séparé. Inutile de dire que vous n'émettez PAS la commande à rm -rf /path/to/directory/.*
moins que vous n'ayez sauvegardé l'intégralité de votre ordinateur dans un emplacement séparé / sécurisé!
Pour supprimer tous les fichiers du répertoire (y compris les fichiers cachés et les sous-répertoires), exécutez:
rm -rf /path/to/directory/{*,.*}
./
et ../
, mais qu'il supprimera tout de même les fichiers cachés.
rm -r $(pwd)/{*,.*}
Si vous souhaitez supprimer uniquement les fichiers de / path / to / directory, vous pouvez le faire.
find /path/to/directory -type f -print0| xargs -0 rm
ou
find /path/to/directory -type f -exec rm '{}' \;
Vous pouvez faire des charges avec find
, l’avantage est que vous pouvez lister ce qui est trouvé sans le canaliser afin rm
que vous puissiez voir ce qui sera supprimé avant de commencer.
GNU find
en tant que -delete
prédicat. Si vous voulez toujours utiliser -exec
, substituer \;
par +
rassemblera les rm
appels, ce qui augmentera l'efficacité.
Pour supprimer tous les fichiers et répertoires (y compris ceux cachés ) d'un répertoire, vous pouvez essayer les solutions suivantes:
supprimer le dossier, puis le recréer
rm -rf dir_name && mkdir dir_name
utilisation find
find dir_name -mindepth 1 -delete
Ici, nous -mindepth 1
spécifions pour exclure le répertoire dir_name lui-même.
Jetez un coup d'oeil au lien suivant:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory
Si vous souhaitez également supprimer tous les sous-répertoires et le répertoire lui-même, vous pouvez utiliser rm -rf /path/to/directory
. Mais vérifiez toujours votre ligne avant d'appuyer sur Entrée, ce qui rm -rf
peut causer beaucoup de dégâts, par exemple si vous insérez accidentellement un espace après la première barre oblique tout en ayant les permissions de super-utilisateur ...
Puisque cette question est constamment au sommet de Google lorsque je le recherche moi-même:
Les autres réponses souffrent de problèmes différents:
Certains d'entre eux incluent .
et ..
qui est bruyant, déroutant et ennuyeux.
Certains d'entre eux oublient les fichiers cachés (fichiers commençant par un point).
Ils ne suppriment pas dans un ordre correct (le plus profond en premier) pour permettre la suppression du répertoire.
Ils descendent dans d'autres systèmes de fichiers (montés), ce qui est souvent indésirable.
Ils sont difficiles à étendre correctement avec des paramètres supplémentaires (plus de détails ci-dessous).
find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p\0" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --
Notez que j'ai ajouté un -xdev
argument pour empêcher la descente dans les montages (comme /proc
etc.).
-depth
ou -delete
?Bien que les gens me votent constamment pour cela, ces méthodes ont un inconvénient: elles ne semblent pas suffisamment extensibles pour autoriser -prune
un sous-répertoire (sans introduire plus de problèmes). En contraste avec cette méthode, vous pouvez insérer
-not \( -path "${DIR}/subdir" -prune \)
avant l' -mindepth
argument à exclure subdir
de la suppression de son contenu.
-depth
drapeau find
pour cela.
-delete
avecfind
? -delete
est la profondeur d'abord. Vous supposez déjà ne pas être POSIX find
avec le -printf
, alors vous pourriez aussi bien utiliser -delete
ou-depth -print0 | xargs -0 rm
-not \( -path "$DIR/subdir" \)
... mais la mienne fonctionne? Pourquoi?
Vous pouvez cd
entrer dans le répertoire et ensuite exécuter la commande rm *.*
comme dans DOS si vous vous en souvenez.
shopt -s dotglob
avant de l'exécuterrm (...)