2010-05-27 2 views
3

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

эхо «»> имя-файл

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

ответ

7

Вы можете сделать следующее с помощью прикосновения:

#!/bin/sh 
TMPFILE=`mktemp` 
#save the timestamp 
touch -r file-name $TMPFILE 
> file_name 
#restore the timestamp after truncation 
touch -r $TMPFILE file-name 
rm $TMPFILE 
+0

Отлично! Спасибо. –

1

Here это хорошая статья. Надеюсь, это поможет.

ДОБАВЛЕНО:

К сожалению, только что прочитал, что вам нужно нулевой файл, а не копии. Touch может создавать нулевые файлы с необходимыми отметками времени.

Пример

To set the date to 7:30 am 1st October 2015 
    touch /t 2015 10 01 07 30 00 MyFile.txt 
2

Вы можете пропустить файл TMP с помощью даты, чтобы записать строку метки времени и передать его обратно на ощупь.

#!/bin/sh 
# Save the timestamp 
STAMP=`date -r file_name` 
> file_name 
# Restore the timestamp 
touch -d "$STAMP" file_name 
+0

Хотя я все еще думаю, что это чище и быстрее не писать в файловую систему, флаг -r не настолько распространен, как я думал. Например, оболочка Darwin от OSX Lion не поддерживает его. – mmond

0

В дополнение к mmond «s ответ (не могу комментировать из-за недостаточной репутации), не забывайте о локализации. Для работы с любой локализацией ответ следует читать:

#!/bin/sh 
# Save the timestamp 
STAMP=`LANG= date -r file_name` 
> file_name 
# Restore the timestamp 
touch -d "$STAMP" file_name 
Смежные вопросы