GNU/Linux >> Znalost Linux >  >> Linux

Mazání miliard souborů z adresáře a zároveň sledování pokroku?

Mám adresář o velikosti 30 TB s miliardami souborů, které jsou formálně všechny soubory JPEG. Každou složku souborů mažu takto:

sudo rm -rf bolands-mills-mhcptz

Tento příkaz se pouze spustí a nic neukáže, zda funguje nebo ne.

Chci vidět, jak maže soubory nebo jaký je aktuální stav příkazu.

Přijatá odpověď:

Můžete použít rm -v mít rm vytisknout jeden řádek na odstraněný soubor. Tímto způsobem můžete vidět, že rm skutečně pracuje na odstranění souborů. Ale pokud máte miliardy souborů, uvidíte pouze to rm stále pracuje. Nebudete mít ponětí, kolik souborů je již smazáno a kolik zbývá.

Nástroj pv vám může pomoci s odhadem postupu.

http://www.ivarch.com/programs/pv.shtml

Zde je návod, jak byste vyvolali rm s pv s ukázkovým výstupem

$ rm -rv dirname | pv -l -s 1000 > logfile
562  0:00:07 [79,8 /s] [====================>                 ] 56% ETA 0:00:05

V tomto vykonstruovaném příkladu jsem řekl pv že jich je 1000 soubory. Výstup z pv ukazuje, že 562 je již smazáno, uplynulý čas je 7 sekund a dokončení odhadu je za 5 sekund.

Nějaké vysvětlení:

  • pv -l dělá pv počítat po nových řádcích místo bajtů
  • pv -s number říká pv jaký je celkový součet, aby vám mohl poskytnout odhad.
  • Přesměrování na logfile na konci je pro čistý výstup. Jinak stavový řádek z pv se smíchá s výstupem z rm -v . Bonus:budete mít záznam o tom, co bylo smazáno. Ale pozor, soubor bude obrovský. Můžete také přesměrovat na /dev/null pokud protokol nepotřebujete.

Chcete-li získat počet souborů, můžete použít tento příkaz:

$ find dirname | wc -l

To také může trvat dlouho, pokud existují miliardy souborů. Můžete použít pv zde také uvidíte, kolik se to napočítalo

$ find dirname | pv -l | wc -l
278k 0:00:04 [56,8k/s] [     <=>                                              ]
278044

Zde se píše, že napočítaní 278k souborů trvalo 4 sekundy. Přesný počet na konci (278044 ) je výstup z wc -l .

Pokud nechcete čekat na počítání, můžete počet souborů uhodnout nebo použít pv bez odhadu:

$ rm -rv dirname | pv -l > logfile

Takto nebudete mít žádný odhad na dokončení, ale alespoň uvidíte, kolik souborů již bylo smazáno. Přesměrujte na /dev/null pokud soubor protokolu nepotřebujete.

Související:Jak připojit data do vyrovnávací paměti v shell skriptu?

Nitpick:

  • opravdu potřebujete sudo ?
  • obvykle rm -r stačí mazat rekurzivně. není potřeba rm -f .

Linux
  1. Jak získat počet souborů v adresáři pomocí příkazového řádku?

  2. Jaký je nejlepší způsob, jak spočítat počet souborů v adresáři?

  3. Migrace linuxového serveru z příkazového řádku

  1. Počítání počtu souborů v adresáři pomocí C

  2. Jak zkopírovat 10 posledních souborů z jednoho adresáře do druhého?

  3. Jak zobrazit seznam nedávno smazaných souborů z adresáře?

  1. Zajištění toho, že nové soubory v adresáři patří do skupiny

  2. Kde je dočasný adresář v Linuxu?

  3. Hledání souborů, které zabírají nejvíce místa na disku