Saya memiliki direktori 30 TB yang memiliki miliaran file di dalamnya yang secara resmi semua file JPEG. Saya menghapus setiap folder file seperti ini:
sudo rm -rf bolands-mills-mhcptz
Perintah ini hanya berjalan dan tidak menunjukkan apa-apa apakah itu berfungsi atau tidak.
Saya ingin melihat karena menghapus file atau apa status perintah saat ini.
rm
progress-information
Junaid Farooq
sumber
sumber
rm -ri
. Akan menyenangkan!Jawaban:
Anda dapat menggunakan
rm -v
untukrm
mencetak satu baris per file dihapus. Dengan cara ini Anda dapat melihat bahwarm
memang berfungsi untuk menghapus file. Tetapi jika Anda memiliki miliaran file maka yang akan Anda lihat adalah yangrm
masih berfungsi. Anda tidak akan tahu berapa banyak file yang sudah dihapus dan berapa banyak yang tersisa.Alat ini
pv
dapat membantu Anda dengan estimasi kemajuan.http://www.ivarch.com/programs/pv.shtml
Berikut adalah bagaimana Anda akan memanggil
rm
denganpv
dengan contoh keluaranDalam contoh buat ini saya mengatakan
pv
bahwa ada1000
file. Output daripv
menunjukkan bahwa 562 sudah dihapus, waktu yang berlalu adalah 7 detik, dan estimasi untuk menyelesaikan dalam 5 detik.Beberapa penjelasan:
pv -l
membuatpv
untuk menghitung dengan baris baru, bukan bytepv -s number
memberi tahupv
apa totalnya sehingga dapat memberi Anda perkiraan.logfile
pada akhirnya adalah untuk output bersih. Kalau tidak, baris status daripv
akan tercampur dengan output darirm -v
. Bonus: Anda akan memiliki file log dari apa yang telah dihapus. Namun waspadalah file tersebut akan menjadi besar. Anda juga dapat mengalihkan ke/dev/null
jika Anda tidak perlu log.Untuk mendapatkan jumlah file, Anda dapat menggunakan perintah ini:
Ini juga bisa memakan waktu lama jika ada miliaran file. Anda dapat menggunakan di
pv
sini juga untuk melihat berapa yang telah dihitungDi sini dikatakan bahwa butuh 4 detik untuk menghitung 278k file. Hitungan tepat di akhir (
278044
) adalah output dariwc -l
.Jika Anda tidak ingin menunggu penghitungan maka Anda bisa menebak jumlah file atau menggunakan
pv
tanpa estimasi:Seperti ini, Anda tidak akan memiliki estimasi untuk selesai tetapi setidaknya Anda akan melihat berapa banyak file yang sudah dihapus. Arahkan ulang ke
/dev/null
jika Anda tidak memerlukan logfile.Nitpick:
sudo
?rm -r
cukup untuk menghapus secara rekursif. tidak perlu untukrm -f
.sumber
pv
, dengan anggapan tidak terlalu mahal untuk menghitung milyaran file ;-). (Mungkin perlu waktu yang hampir sama denganrm
yang seharusnya diukur!)pv
menyegarkan progress bar hanya sekali per detik, terlepas dari inputnya. Jadi, terminal hanya perlu menampilkan satu baris daripada satu ton setiap detik.pv
hanya perlu menambah penghitung untuk setiap baris baru yang dihadapinya; itu harus lebih cepat daripada melakukan pembungkus garis, dan yang lainnya untuk menampilkan garis di terminal. Saya pikir menjalankan denganpv
seperti ini menyebabkan penghapusan file menjadi lebih cepat dari sekadarrm -rv
.rm -rv dirname | pv -l -s $(find dirname | wc -l) > logfile
Lihatlah jawaban lesmana , ini jauh lebih baik daripada jawaban saya - terutama
pv
contoh terakhir , yang tidak akan lebih lama dari yang asli diamrm
jika Anda menentukan/dev/null
bukanlogfile
.Dengan asumsi Anda
rm
mendukung opsi (mungkin karena Anda menjalankan Linux), Anda dapat menjalankannya dalam mode verbose dengan-v
:Seperti yang telah ditunjukkan oleh sejumlah komentator, ini bisa sangat lambat karena jumlah output yang dihasilkan dan ditampilkan oleh terminal. Anda bisa mengarahkan output ke file:
dan perhatikan ukuran
rm-trace.txt
.sumber
Pilihan lain adalah untuk menonton jumlah file pada penurunan filesystem. Di terminal lain, jalankan:
Hitungan inode yang digunakan akan berkurang seiring
rm
kemajuan. (Kecuali jika sebagian besar file memiliki banyak tautan, mis. Jika pohon dibuat dengancp -al
). Ini melacak penghapusan kemajuan dalam hal jumlah file (dan direktori).df
tanpa-i
akan melacak dalam hal ruang yang digunakan.Anda juga dapat menjalankan
iostat -x 4
untuk melihat operasi I / O per detik (dan juga kiB / s, tetapi itu tidak terlalu relevan untuk I / O metadata murni).Jika Anda ingin tahu tentang file apa
rm
yang sedang dikerjakan, Anda dapat melampirkannyastrace
dan menonton ketikaunlink()
panggilan sistem (dan getdents) memuntahkan di terminal Anda. missudo strace -p $(pidof rm)
. Anda dapat^c
melepaskan talirm
tanpa memotongnya.Saya lupa jika
rm -r
direktori perubahan ke pohon itu dihapus; jika demikian Anda bisa melihat/proc/<PID>/cwd
. Ini/proc/<PID>/fd
mungkin sering memiliki direktori fd terbuka, sehingga Anda bisa melihatnya untuk melihat apa yang sedang dilihat olehrm
proses Anda .sumber
df -ih
memang cara murah yang bagus untuk menontonrm
kemajuan./boot
partisi sistem EFI Anda .Sementara jawaban di atas semuanya digunakan
rm
,rm
sebenarnya bisa sangat lambat dalam menghapus sejumlah besar file, seperti yang baru-baru ini saya amati ketika mengekstraksi ~ 100 ribu file dari arsip .tar sebenarnya membutuhkan waktu lebih sedikit daripada menghapusnya. Meskipun ini sebenarnya tidak menjawab pertanyaan yang Anda ajukan, solusi yang lebih baik untuk masalah Anda mungkin menggunakan metode berbeda untuk menghapus file Anda, seperti salah satu jawaban yang dipilih untuk pertanyaan ini .Metode favorit pribadi saya adalah menggunakan
rsync -a --delete
. Saya menemukan bahwa metode ini berkinerja cukup cepat sehingga sebanding dengan kemudahan penggunaan atas jawaban yang paling banyak dipilih untuk pertanyaan itu , di mana penulis telah menulis program C yang perlu Anda kompilasi. (Perhatikan bahwa ini akan menampilkan setiap file yang sedang diproses ke stdout, sepertirm -rv
; ini dapat memperlambat proses dengan jumlah yang mengejutkan. Jika Anda tidak ingin keluaran ini, gunakanrsync -aq --delete
atau arahkan output ke file sebagai gantinya.)Penulis jawaban itu mengatakan:
Saya telah menemukan bahwa ini cukup baik untuk tujuan saya. Juga berpotensi penting dari jawaban itu, setidaknya jika Anda menggunakan ext4:
sumber
rm
dan / ataufind --delete
menjadi efisien. Poin menarik tentang menghapus dalam urutan untuk menghindari penyeimbangan b-tree saat menghapus. Tidak yakin berapa banyak dari itu berlaku untuk sistem file lain. XFS juga tidak hebat dengan jutaan file per direktori. IDK tentang BTRFS, tapi saya mendapat kesan bahwa itu mungkin baik untuk hal semacam itu.Satu hal yang dapat Anda lakukan adalah memulai
rm
proses di latar belakang (tanpa output, sehingga tidak akan melambat) dan kemudian, pantau di latar depan dengan perintah (a) sederhana :The
find/wc
combo bisa diganti dengan alat apapun dapat memberikan unit yang Anda inginkan.(a) Yah, relatif sederhana, dibandingkan dengan, katakanlah, fisika nuklir, hipotesis Riemann, atau apa yang harus dibeli istri saya untuk Xmas :-)
sumber
Beberapa waktu yang lalu saya menulis sesuatu untuk mencetak tingkat bahwa garis dicetak. Anda dapat menjalankan
rm -rfv | ./counter
dan itu akan mencetak garis per detik / menit. Meskipun bukan kemajuan langsung, itu akan memberi Anda umpan balik pada tingkat kemajuan, mungkinrm
mengembara ke sistem file jaringan atau serupa mungkin?Tautan ke kode ada di sini:
http://www.usenix.org.uk/code/counter-0.01.tar.gz
sumber