Насправді друга форма touch filename
нічого не видаляє з файлу - вона створює лише порожній файл, якщо такого не існувало, або оновлює останню змінену дату існуючого файлу.
І третя filename < /dev/null
намагається запустити ім'я файлу з /dev/null
введенням.
cp /dev/null filename
працює.
Щодо ефективного, найефективнішим було б truncate -s 0 filename
; дивіться тут: http://linux.die.net/man/1/truncate .
В іншому випадку cp /dev/null filename
або > filename
обидва штрафу. Вони обидва відкривають, а потім закривають файл, використовуючи налаштування усікання-відкривання. cp
також відкривається /dev/null
, так що робить це незначно повільніше.
З іншого боку, truncate
це, швидше за все, буде повільніше, ніж > filename
при запуску зі скрипту, оскільки виконання команди усікання вимагає від системи відкрити виконуваний файл, завантажити його та запустити його.
truncate -s 0 filename
?