Wie führen Sie einen Probelauf von rm durch, um zu sehen, welche Dateien gelöscht werden?

87

Ich möchte sehen, welche Dateien unter rmLinux gelöscht werden . Die meisten Befehle scheinen eine Trockenlaufoption zu haben, um nur solche Informationen anzuzeigen, aber ich kann eine solche Option für scheinbar nicht finden rm. Ist das überhaupt möglich?

Cory Klein
quelle
Ich würde auch gerne sehen, welche Dateien aufgrund fehlender Berechtigungen Fehler erzeugen.
Simon Woodside

Antworten:

121

Angenommen, Sie möchten ausgeführt werden:

rm *.txt

Sie können einfach laufen:

echo rm *.txt

oder auch nur:

echo *.txt

um zu sehen, welche Dateien rmgelöscht würden, da es sich bei der Shell um die Erweiterung handelt *.txt, nicht rm.

Das einzige Mal, dass dir das nicht hilft, ist für rm -r.

Wenn Sie Dateien und Verzeichnisse rekursiv entfernen möchten, können Sie findanstelle von rm -rz

find . -name "*.txt" -print

Wenn es dann tut, was Sie wollen, ändern Sie das -printzu -delete:

find . -name "*.txt" -delete
Mikel
quelle
find ist eine gute wahl IMO. Und wenn Sie eine grafische Darstellung wünschen, verwenden Sie tree.
Noisebleed
2
Fast perfekt. find . -name "*.txt" -deletescheint aber nicht rekursiv zu sein. Entfernte alle Dateien, entfernte aber nicht die Verzeichnisse, die in-print
Oscar Godson
1
@OscarGodson Vorausgesetzt, die Verzeichnisse wurden nach dem Entfernen der Dateien leer gelassen, können Sie sie mitfind . -type d -empty -delete
datguy
1
@OscarGodson - findlöscht keine Verzeichnisse, die noch Dateien enthalten (äquivalent zu rm dir/without -r). Sie würden zunächst das Verzeichnis leer müssen - oder verwenden , findum -exec rmmit den entsprechenden Optionen , dies zu tun. egfind . -depth -name "*.txt" -exec rm -r {} +
shalomb
Das Verwenden der echo rm *.txtMethode scheint einen Nachteil zu haben. Die Ergebnisse werden in einer verketteten Liste dargestellt (eine lange Zeichenfolge mit einer Datei nach der vorherigen), im Gegensatz zu einer vertikalen Liste. Gibt es eine Möglichkeit, die Ausgabe in einer vertikalen Liste anzuzeigen (eine Datei pro Zeile)? (UPDATE: Ich sehe, dass die findMethode das tut, was ich verlangt habe. Also werde ich damit anfangen.)
inspiriert vom
16

Sie können sagen:

rm -i

rmWenn Sie es im interaktiven Modus ausführen möchten, werden Sie aufgefordert, zu bestätigen, ob jede Datei gelöscht werden soll. Sie können einfach auf jede Datei mit "Nein" antworten, um zu sehen, welche davon betroffen sind.

Justin Ethier
quelle
8
Dies ist bei einer großen Anzahl von Dateien ziemlich schwierig.
Cory Klein
9
ja n | rm -i #comment Mindestkommentarlänge zu treffen
Joshua
4

Mit können Sie lsalle Dateien auflisten, die entfernt werden rm:

ls ../path/*.txt

Wenn Sie eine Liste benötigen, um die Dateien anzuzeigen, die rekursiv gelöscht werden sollen rm, verwenden Sie das -RFlag mit ls:

ls -R ../path/*.txt
Veneet Reddy
quelle
Guter Punkt. Wenn Sie den Verschachtelungsgrad kennen, können Sie dies mitls */*/*.txt
Veneet Reddy
1
Du hast recht. Mit der -ROption.
Veneet Reddy