Bagaimana Anda menjalankan menjalankan kering rm untuk melihat file apa yang akan dihapus?

87

Saya ingin melihat file apa yang akan dihapus ketika melakukan rmdi linux. Sebagian besar perintah tampaknya memiliki opsi jalankan untuk hanya menampilkan informasi seperti itu, tetapi saya tidak bisa menemukan opsi seperti itu untuk rm. Apakah ini mungkin?

Cory Klein
sumber
Saya juga ingin melihat file mana yang akan menghasilkan kesalahan karena kurangnya izin.
Simon Woodside

Jawaban:

121

Katakanlah Anda ingin menjalankan:

rm *.txt

Anda bisa menjalankan:

echo rm *.txt

atau bahkan hanya:

echo *.txt

untuk melihat file apa yang rmakan dihapus, karena shell memperluas *.txt, bukan rm.

Satu-satunya saat ini tidak akan membantu Anda adalah untuk rm -r.

Jika Anda ingin menghapus file dan direktori secara rekursif, maka Anda bisa menggunakan findbukan rm -r, misalnya

find . -name "*.txt" -print

maka jika itu melakukan apa yang Anda inginkan, ubah -printke -delete:

find . -name "*.txt" -delete
Mikel
sumber
temukan adalah pilihan IMO yang bagus. Dan jika Anda ingin menggunakan presentasi grafis tree.
noisebleed
2
Hampir sempurna. find . -name "*.txt" -deletesepertinya tidak bersifat rekursif. Menghapus semua file, tetapi tidak menghapus direktori yang terdaftar di-print
Oscar Godson
1
@OscarGodson Dengan anggapan direktori dibiarkan kosong setelah menghapus file, Anda dapat menghapusnya denganfind . -type d -empty -delete
datguy
1
@OscarGodson - findtidak akan menghapus direktori yang masih berisi file (setara dengan rm dir/tanpa -r). Anda harus mengosongkan direktori pertama - atau menggunakan finduntuk -exec rmdengan pilihan yang tepat untuk melakukan hal ini. misalnyafind . -depth -name "*.txt" -exec rm -r {} +
shalomb
Menggunakan echo rm *.txtmetode ini tampaknya memiliki kelemahan. Ini menyajikan hasil dalam daftar gabungan (string panjang dengan satu file setelah yang sebelumnya), sebagai lawan dari daftar vertikal. Apakah ada cara untuk mendapatkan output untuk ditampilkan dalam daftar vertikal (satu file per baris)? (PEMBARUAN: Saya melihat bahwa findmetode ini melakukan apa yang saya minta. Jadi saya akan menjalankannya.)
terinspirasinz
16

Anda bisa mengatakan:

rm -i

untuk menjalankannya dalam mode interaktif, jadi rmakan meminta Anda untuk mengkonfirmasi apakah setiap file harus dihapus. Anda bisa menjawab tidak untuk setiap file untuk melihat mana yang akan terpengaruh.

Justin Ethier
sumber
8
Ini agak sulit dengan sejumlah besar file.
Cory Klein
9
ya n | rm -i #Comment untuk memenuhi panjang komentar minimum
Joshua
4

Anda dapat menggunakan lsdaftar semua file yang akan dihapus oleh rm:

ls ../path/*.txt

Jika Anda perlu daftar untuk melihat file yang akan dihapus dengan rekursif rm, maka gunakan -Rflag dengan ls:

ls -R ../path/*.txt
Veneet Reddy
sumber
Poin bagus. Meskipun jika Anda tahu tingkat sarangnya maka Anda dapat mencapainya denganls */*/*.txt
Veneet Reddy
1
Kamu benar. Dengan -Ropsi.
Veneet Reddy