it-swarm.com.de

Wie kann ich überprüfen, ob file2 neuer als file1 in bash ist?

Wie kann ich überprüfen, ob file2 zuletzt nach file1 geändert wurde?

In diesem Beispiel wurde Perl kürzlich geändert als stack. Gibt es einen Bash- oder Linux-Befehl, der diese Dateien basierend auf der Änderungszeit vergleichen kann ?

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

Fand es hier

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

Entnommen aus ' Man Test '. Auszug:

FILE1 -nt FILE2
  FILE1 is newer (modification date) than FILE2
37
Eddie Parker

Ein anderer Weg dies zu tun:

find -name file2 -newer file1

gibt null zurück, wenn file2 älter oder gleich alt wie file1 ist. Es gibt den Namen (und das Verzeichnis) von Datei2 zurück, wenn es neuer ist.

Beachten Sie, dass Linux nicht nachverfolgt, wann Dateien erstellt wurden. Diese Tests beziehen sich auf das Datum und die Uhrzeit der letzten Änderung.

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

Wenn das Ergebnis> 0 ist, ist die erste Datei neuer. (Neuer in Bezug auf die letzte Änderung, nicht die Erstellungszeit, die unter Linux gespeichert ist).

2
user unknown

Wenn Sie detailliertere Informationen wünschen, können Sie den Befehl stat verwenden

<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
2
Tim Bielawa

Laut diesem Link speichert Unix kein Erstellungsdatum. http://www.issociate.de/board/post/302628/How_to_check_file_creation_date.html

Speichert aber den letzten Zugriff.

für den letzten Zugriff

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

ls zeigt jede Datei in einer neuen Zeile an.

so zeigt ls -t die neueste Datei in der ersten Zeile usw. an.

  • Sie können selbst die erste Zeile auswählen.
  • Mit sed können Sie die erste Zeile auswählen.

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

könnte -lt tun, obwohl Sie sehen werden, dass wenn Sie keine Dateien angeben .. und es das Verzeichnis tut .. dann gibt es die Summe in der ersten Zeile, so dass Sie die zweite Zeile wie $ls -lt | sed -n '2p' auswählen

Ein guter wäre

ls -t | head -n 1

oder

ls -lt | head   

zeigt die ersten 10 Zeilen in der Reihenfolge an, in der die erste Datei zuerst geändert wurde, und Sie können sehen, um welche es sich handelt

0
barlop

Hier ist ein kleines Skript, das ich gemacht habe:

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