Znám tři způsoby, jak odstranit všechny položky ze souboru.
Jsou
>filename
touch filename
filename < /dev/null
Z těchto tří zneužívám >filename
nejvíce, protože to vyžaduje nejmenší počet úhozů.
Rád bych však věděl, která z těchto tří metod je nejúčinnější (pokud existují nějaké efektivnější metody) s ohledem na velké soubory protokolu a malé soubory.
Také, jak fungují tyto tři kódy a jak vymazávají obsah?
Upravit :jak je uvedeno v této odpovědi, ve skutečnosti to není vymažte soubor!
Přijatá odpověď:
Ve skutečnosti druhý tvar touch filename
ze souboru nic nesmaže – pouze vytvoří prázdný soubor, pokud žádný neexistuje, nebo aktualizuje datum poslední změny existujícího souboru.
A třetí filename < /dev/null
pokusí se spustit název souboru s /dev/null
jako vstup.
cp /dev/null filename
funguje.
Pokud jde o efektivitu, nejúčinnější by bylo truncate -s 0 filename
(viz zde).
Jinak cp /dev/null filename
nebo > filename
jsou oba v pohodě. Oba soubor otevřou a poté zavřou pomocí nastavení zkrácení při otevření. cp
také otevře /dev/null
, takže je o něco pomalejší.
Na druhou stranu truncate
bude pravděpodobně pomalejší než > filename
při spuštění ze skriptu, protože spuštění příkazu truncate vyžaduje, aby systém otevřel spustitelný soubor, načetl jej a poté spustil.