Опорожнение содержимое текстового файла

У меня есть текстовый файл в моем домашнем каталоге, который регулярно получает данные через задание cron. Поскольку задание cron предоставляет динамические данные, я также хотел бы установить задание cron для очистки содержимого файла (файл должен все еще существовать). Мне не нужна помощь с cron, только команда, которая может помочь с очисткой файла.

14
задан 15 September 2013 в 06:24

4 ответа

Самый простой способ:

> filename

Это менее очевидный способ и, вероятно, менее читаемый в сценарии оболочки другими, но это все, что вам нужно.

Поскольку > на самом деле не является настоящей командой (это встроенная команда bash), вы не можете использовать:

sudo > filename

, если у вас нет прав для этого файла. Но вы можете использовать:

sudo bash -c "> filename"
0
ответ дан 15 September 2013 в 06:24

Для автоматизации этого вы можете использовать logrotate. Просто создайте файл конфигурации для файла, который вы хотите очистить, добавьте другие настройки, и вы можете автоматически очищать его каждый день в зависимости от критериев, которые вы выбираете каждый день, или когда файл больше чем т. Д.

Посмотрите здесь, как настроить logrotate: http://linuxcommand.org/man_pages/logrotate8.html

0
ответ дан 15 September 2013 в 06:24

echo "" > foo_file - простой способ сделать это, он заменит все содержимое foo_file на "" , сделав его в этом случае пустым.

Вы также можете использовать cat /dev/null > foo_file, который будет читать нулевое устройство и перезаписывать ваш файл вообще ничем.

0
ответ дан 15 September 2013 в 06:24

Для этой цели создан инструмент:

truncate -s 0 filename

Он удалит содержимое, но он останется тем же файлом (индекс останется прежним).

]

Это важно, потому что некоторые программы хранят дескриптор файла «по индексу». Предположим, вы «очистили» файл, используя наивный метод удаления и повторного создания файла. Некоторые программы могут по-прежнему хранить дескриптор старого файла (со старым содержимым), даже если он больше не виден обычными средствами, такими как ls.

Некоторые ссылки на более подробную информацию в конце этого ответа.


Другой способ, может быть, легче запомнить:

echo -n > filename

Это также сохраняет тот же индекс.

Обратите внимание, что truncate и echo -n не определены в POSIX .

Для соответствия POSIX используйте cat /dev/null:

cat /dev/null > filename

Еще один способ, более неясный и, вероятно, не зависящий от оболочки:

> filename

Если нужен файл для усечения Привилегии root для записи затем следующих строк не будут работать так, как, вероятно, ожидается:

sudo echo -n > filename
sudo cat /dev/null > filename
sudo > filename

Это происходит потому, что перенаправление выполняется оболочкой даже до выполнения sudo. Это означает, что доступ для записи в файл осуществляется с использованием привилегий пользователя, который запускает оболочку, а не привилегий, которые будут предоставлены sudo.

Обходной путь - отложить перенаправление на оболочку, выполняемую с использованием привилегий sudo, например:

sudo sh -c "echo -n > filename"

При использовании truncate такой обходной путь не требуется, поскольку доступ на запись не выполняется оболочкой. но с помощью truncate, который выполняется sudo с использованием привилегий sudo.

sudo truncate -s 0 filename

Некоторые подробности о программах, которые держат файл открытым, даже если файл был удален, вы можете прочитать в следующем:

0
ответ дан 15 September 2013 в 06:24

Другие вопросы по тегам:

Похожие вопросы: