2 Stimmen

Wie kann ich mit Unix find(1) Dateien in einem Baum finden, die neuer sind als ihre Gegenstücke in einem anderen Baum?

Nehmen wir an, ich habe zwei Verzeichnisstrukturen:

/var/www/site1.prod
/var/www/site1.test

Ich möchte die finden(1) um die Dateien zu sehen, die neuer sind in /var/www/site1.test als ihre Pendants in /var/www/site1.prod .

Kann ich dies tun mit finden(1) und wenn ja, wie?

0 Stimmen

Retitle: 'find(1) files newer than others' zumindest, bitte

0 Stimmen

+1 interessant. Obwohl wahrscheinlich geschlossen werden, da dies mehr mit sysadmining als mit Programmierung verbunden ist. Ich, ich trenne sie nicht so fein säuberlich.

0 Stimmen

@Adriano Varoli Piazza: Ich würde Shell-Skripting als Programmieren zählen :)

8voto

Bruce ONeel Punkte 1969

Sie könnten auch rsync -n verwenden

rsync -av -n /var/www/site1.test /var/www/site1.prod

sollte es tun.

4voto

vladr Punkte 63255

Mit find ,

cd /var/www/site1.test
find . -type f -print | while read file ; do
  [ "$file" -nt /var/www/site1.prod/"$file" ] && echo "File '$file' changed"
done

Dies funktioniert auch bei Dateinamen, die Leerzeichen enthalten, und bei einer großen Anzahl von Dateien.

Um zwischen geänderten und fehlenden Dateien zu unterscheiden, wie in Eddies Kommentar beschrieben,

cd /var/www/site1.test
find . -type f -print | while read file ; do
  [ "$file" -nt /var/www/site1.prod/"$file" ] && reason=changed
  [ \! -e /var/www/site1.prod/"$file" ] && reason=created
  [ -n "$reason" ] && echo "$file $reason"
done

2voto

Antti Huima Punkte 24441

Ich denke, dass man es nicht allein mit der Suche erreichen kann, aber man kann etwas tun wie

$ cd /var/www/site1.test
$ files=`find .`
$ for $f in $files; do
     if [ $f -nt /var/www/site1.prod/$f ]; then echo "$f changed!"; fi;
  done

0voto

Jackson Punkte 5533

Wenn Sie sich die Option -fprintf ansehen, sollten Sie in der Lage sein, zwei Funde zu erstellen, die in zwei Dateien ausgegeben werden, die den Dateinamen und die Änderungszeit auflisten. Sie sollten dann in der Lage sein, einfach die beiden Dateien zu vergleichen, um zu sehen, was sich geändert hat.

0voto

Sarel Botha Punkte 12053

Ich verstehe, dass Sie speziell nach neueren Lösungen gefragt haben, aber ich denke, es ist immer gut, alle Optionen zu kennen.

Ich würde diff -ur dir1 dir2 verwenden.

Vielleicht hat sich der Zeitstempel geändert, vielleicht auch nicht, aber das sagt nicht unbedingt aus, ob der Inhalt derselbe ist. Diff wird Ihnen sagen, ob sich der Inhalt geändert hat. Wenn Sie den Inhalt nicht sehen wollen, verwenden Sie diff -rq, um nur die Dateien zu sehen, die sich geändert haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X