47

Как я могу проверить, что file2 был последний раз изменен после file1?

В этом примере perl был изменен совсем недавно, чем stack . Существует ли команда bash или Linux, которая может сравнивать эти файлы по времени модификации?

-rw-r--r--    1 root     root         1577 Sep  7 22:55 stack
-rwxr-xr-x    1 root     root          626 Sep  7 23:10 perl

7 ответов7

46

Нашел здесь

for f in /abcd/xyz* do
   [ "$f" -nt /abcd/test.txt ] && echo "file f$ found" done
35
if [[ FILE1 -nt FILE2 ]]; then
  echo FILE1 is newer than FILE2
fi

Взято из « мужского теста ». Выдержка:

FILE1 -nt FILE2
  FILE1 is newer (modification date) than FILE2
7

Еще один способ сделать это:

find -name file2 -newer file1

вернет ноль, если file2 старше или того же возраста, что и file1. Он вернет имя (и каталог) file2, если он более новый.

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

2
echo $(($(date -r file1 +%s)-$(date -r file2 +%s)))
2208

Если результат> 0, первый файл новее. (Более новый с точки зрения последней модификации, а не времени создания, которая хранится в Linux).

1

Если вам нужна более подробная информация, вы можете использовать команду stat

<tbielawa>@(fridge)[~/SuperUser] 03:15:10
$ touch firstFile
<tbielawa>@(fridge)[~/SuperUser] 03:15:24
$ touch secondFile
<tbielawa>@(fridge)[~/SuperUser] 03:15:45
$ stat firstFile 
  File: `firstFile'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 805h/2053d  Inode: 151528      Links: 1
Access: (0644/-rw-r--r--)  Uid: (  500/tbielawa)   Gid: (  500/tbielawa)
Access: 2010-09-14 03:15:24.938721003 -0400
Modify: 2010-09-14 03:15:24.938721003 -0400
Change: 2010-09-14 03:15:24.938721003 -0400
<tbielawa>@(fridge)[~/SuperUser] 03:15:48
$ stat secondFile 
  File: `secondFile'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 805h/2053d  Inode: 151529      Links: 1
Access: (0644/-rw-r--r--)  Uid: (  500/tbielawa)   Gid: (  500/tbielawa)
Access: 2010-09-14 03:15:45.074722792 -0400
Modify: 2010-09-14 03:15:45.074722792 -0400
Change: 2010-09-14 03:15:45.074722792 -0400
0

По этой ссылке unix не хранит дату создания. http://www.issociate.de/board/post/302628/How_to_check_file_creation_date.html

Но хранит последний доступ.

для последнего доступа

 ls -t  # displays in order of date. So the first one is the 

ls отображает каждый файл в новой строке.

поэтому ls -t отображает последний файл в первой строке и т. д.

  • Вы можете использовать себя, чтобы выбрать первую строку.
  • Вы можете использовать sed, чтобы выбрать первую строку.

    ls -t php.exe php.ini | sed -n '1p' php.ini

может сделать -lt хотя вы увидите, что если вы не указываете какие-либо файлы ... и он делает каталог ... тогда он выдает сумму в первой строке, поэтому вы выбираете вторую строку как $ls -lt | sed -n '2p'

Хороший был бы

ls -t | head -n 1

или же

ls -lt | head   

отображает первые 10 строк в порядке первого измененного файла первым, и вы можете увидеть, какой он

0

Вот небольшой сценарий, который я сделал:

mtf0=`stat -c %Y file0`    
mtf1=`stat -c %Y file1`    
dt=$(( mtf1 - mtf0 ))    
[[ $dt -gt 0 ]] && echo "File F1 is newer than file F0 "

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .