Comment lancez-vous une exécution à sec pour voir quels fichiers seront supprimés?

87

Je veux voir quels fichiers seront supprimés lors d'une exécution rmsous linux. La plupart des commandes semblent avoir une option d'exécution à sec pour afficher de telles informations, mais je ne semble pas pouvoir trouver une telle option pour rm. Est-ce seulement possible?

Cory Klein
la source
J'aimerais aussi voir quels fichiers vont générer des erreurs faute d'autorisations.
Simon Woodside

Réponses:

121

Dites que vous voulez courir:

rm *.txt

Vous pouvez juste courir:

echo rm *.txt

ou même simplement:

echo *.txt

pour voir quels fichiers rmsupprimeraient, car c’est le shell qui développe le *.txt, pas rm.

La seule fois où cela ne vous aidera pas, c'est pour rm -r.

Si vous souhaitez supprimer des fichiers et des répertoires de manière récursive, vous pouvez utiliser à la findplace de rm -r, par exemple

find . -name "*.txt" -print

puis si cela fait ce que vous voulez, changez le -printen -delete:

find . -name "*.txt" -delete
Mikel
la source
trouver est un bon choix IMO. Et si vous voulez utiliser une présentation graphique tree.
noisebleed
2
Presque parfait. find . -name "*.txt" -deletene semble pas être récursif tho. Suppression de tous les fichiers, mais non de la suppression des répertoires répertoriés dans-print
Oscar Godson le
1
@OscarGodson En supposant que les répertoires soient laissés vides après la suppression des fichiers, vous pouvez les supprimer avecfind . -type d -empty -delete
datguy
1
@OscarGodson - findne supprimera pas les répertoires contenant encore des fichiers (équivalent à rm dir/sans -r). Vous devrez vider le répertoire d' abord - ou utiliser findpour -exec rmles options appropriées pour le faire. par exemplefind . -depth -name "*.txt" -exec rm -r {} +
shalomb
L'utilisation de cette echo rm *.txtméthode semble présenter un inconvénient. Il présente les résultats dans une liste concaténée (une longue chaîne avec un fichier après le précédent), par opposition à une liste verticale. Existe-t-il un moyen d’afficher la sortie dans une liste verticale (un fichier par ligne)? (UPDATE: Je vois que la findméthode fait ce que j'ai demandé. Je vais donc courir avec ça.)
inspirednz
16

Tu peux dire:

rm -i

pour l'exécuter en mode interactif, rmvous invite donc à confirmer si chaque fichier doit être supprimé. Vous pouvez simplement répondre non à chaque fichier pour voir ceux qui seraient affectés.

Justin Ethier
la source
8
C'est assez difficile avec un grand nombre de fichiers.
Cory Klein
9
oui n | rm -i #comment respecter la longueur minimale d'un commentaire
Joshua
4

Vous pouvez utiliser lspour lister tous les fichiers qui seront supprimés par rm:

ls ../path/*.txt

Si vous avez besoin de lister pour afficher les fichiers qui seront supprimés avec un code récursif rm, utilisez le -Rdrapeau avec ls:

ls -R ../path/*.txt
Veneet Reddy
la source
Bon point. Cependant, si vous connaissez le niveau de nidification, vous pouvez y parvenirls */*/*.txt
Veneet Reddy
1
Vous avez raison. Avec l' -Roption.
Veneet Reddy