Comment supprimer en toute sécurité tous les fichiers avec une extension spécifique (par ex. .bak
) à partir du répertoire courant et de tous les sous-dossiers en utilisant une seule ligne de commande? Simplement, j'ai peur d'utiliser rm
depuis que je l'ai mal utilisé une fois et maintenant j'ai besoin de conseils.
Vous n'avez même pas besoin d'utiliser rm
dans ce cas, si vous avez peur. Utiliser find
:
find . -name "*.bak" -type f -delete
Mais utilisez-le avec précaution. Courir en premier:
find . -name "*.bak" -type f
pour voir exactement quels fichiers vous allez supprimer.
Également, assurez-vous que -delete
est le dernier argument sous vos ordres. Si vous le mettez avant le -name *.bak argument
, il supprimera tout.
Voir man find
et man rm
pour plus d'informations et voir aussi cette question connexe sur SE:
< code>trouver . -nom "*.bak " - type f-print0 | xargs -0 / bin / rm-f < / code>< / pre>
Exécutez d'abord la commande shopt -s globstar
. Vous pouvez l'exécuter sur la ligne de commande, et cela n'aura d'effet que dans cette fenêtre shell. Vous pouvez le mettre dans votre .bashrc
, et puis tous les obus nouvellement lancés le ramasseront. L'effet de cette commande est de rendre **/
faire correspondre les fichiers du répertoire courant et de ses sous-répertoires de manière récursive (par défaut, **/
signifie la même chose que */
: uniquement dans les sous-répertoires immédiats). Puis:
rm **/*.bak
(ou gvfs-trash **/*.bak
ou ce que vous avez).
La suppression de fichiers n'est pour moi pas quelque chose que vous devriez utiliser rm
pour. Voici une alternative:
sudo apt-get install gvfs # install a tool that allows you to put stuff in the trashalias "trash"="gvfs-trash" # you can also put this in .bash_aliases or simply use the command without aliastrash *.bak # trash the files (thus moving them to the trash bin)
Comme l'indique Flimm dans les commentaires:
Paquet
trash-cli
fait la même chose quegvfs-trash
sans la dépendance sur gvfs.
Si:
sudo apt-get install trash-cli
Vous n'avez pas besoin de créer un alias pour cela, car le trash-cli
le paquet fournit une commande trash
, qui fait ce que nous voulons.
Comme Eliah Kagan le précise dans de nombreux commentaires, vous pouvez également rendre cela récursif en utilisant find
. Dans ce cas, vous ne pouvez pas utiliser d'alias, donc les commandes ci-dessous supposent que vous avez installé trash-cli
. Je résume les commentaires d'Eliah:
Cette commande trouve et affiche tous les .bak
fichiers et liens symboliques n'importe où dans le répertoire courant ou ses sous-répertoires ou en dessous.
find . -name '*.bak' -xtype f
Pour les supprimer, ajoutez un -exec
avec le trash
commande:
find . -name '*.bak' -xtype f -exec trash {} +
-xtype f
sélectionne les fichiers et les liens symboliques vers les fichiers, mais pas les dossiers. Supprimer .les dossiers bak aussi, supprimez cette partie et utilisez -execdir
, ce qui évite cannot trash non-existent
erreurs pour .bak
fichiers à l'intérieur .bak
annuaire:
find . -name '*.bak' -execdir trash {} +
Si vous souhaitez supprimer tous les fichiers d'un certain type, mais seulement 1 dossier "profond" du dossier actuel:
find . -maxdepth 2 -name "*.log" -type f -delete
- maxdepth 2 parce que le répertoire actuel "."compte comme le premier dossier.
Réponse Rapide:
-
Supprimez récursivement tous les fichiers portant le nom ou le suffixe considéré:
find . -name '*.pyc' -type f -delete
-
Supprimez récursivement tous les répertoires portant le même nom:
find ~ -path '*/__pycache__/*' -deletefind ~ -type d -name '__pycache__' -empty -delete
Un peu moins étroitement contrôlé, mais en une seule ligne:
find ~ -path '*/__pycache__*' -delete
[NOTE]:
d
est l'option de répertoire et f
est l'option de fichier.
Vous pouvez d'abord lister tous les fichiers avec cette extension avant de les utiliser rm
Exemple,
ls *.bak
Si vous obtenez uniquement les fichiers que vous souhaitez supprimer, vous pouvez utiliser le rm
rm *.bak
Si vous souhaitez vérifier la liste avant de supprimer les fichiers, vous pouvez la faire écho.
find . -name "*.bak" -type f | xargs echo rm -rf
Cela listera les résultats de recherche qui sont redirigés vers la commande rm via xargs.Une fois que vous êtes sûr de la liste, vous pouvez déposer la commande echo in ci-dessus.
find . -name "*.bak" -type f | xargs rm -rf