Мне известны три способа удаления всех записей из файла.
Они есть
>filename
touch filename
filename < /dev/null
Из этих трех я злоупотребляю >filename
больше всего, так как для этого требуется наименьшее количество нажатий клавиш.
Тем не менее, я хотел бы знать, какой из трех наиболее эффективных методов (если есть какие-либо более эффективные) применяется в отношении больших файлов журналов и небольших файлов.
Кроме того, как три кода работают и удаляют содержимое?
shell-script
files
Debal
источник
источник
truncate -s 0 filename
?Ответы:
На самом деле, вторая форма
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 требуется, чтобы система открыла исполняемый файл, загрузила его и запустила.источник
truncate
это самый эффективный?> filename
методы.truncate(2)
не делает этого.touch filename
, останется ли индекс неизменным (при условии, что ранее был файл)?ls -i
Другой вариант может быть:
Со страницы руководства
echo
:источник
Существует встроенная команда «:», которая доступна в sh, csh, bash и других, возможно, которая может быть легко использована с помощью оператора перенаправления вывода,
>
усекающего файл:Что мне нравится в этом, так это то, что ему не нужны никакие внешние команды, такие как «echo» и т. Д.
Одним из больших преимуществ усечения файлов вместо их удаления / воссоздания является то, что запущенным приложениям, которые работают с этим файлом (например, кто-то создает
tail -f filename
программное обеспечение или программное обеспечение для мониторинга, ...), не нужно повторно открывать его. Они просто могут продолжать использовать файловый дескриптор и получать все новые данные.источник
man bash
описывает:
встроенную оболочку как не имеющую эффекта.>
in в файл, который создает файл, если он не существует, и, если он существует, вы усекаете его до нуля. Лучше сказать: вы используете,:
чтобы ничего не делать, и использовать,>
чтобы ничего не перенаправлять в файл, и обрезать его.> file
достаточно, чтобы обрезать файл. Вам не нужна никакая команда, только оператор перенаправления.> filename
не сработает. например, в зш. но: > filename
работает до сих пор.> myfile
но, например, csh error with: Invalid null command.