Znám tři způsoby, jak odstranit všechny položky ze souboru.
Jsou
>filenametouch filenamefilename < /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.