Verwenden Sie nur Funktionen, die unter AIX oder anderen POSIX- und kaum mehr Systemen verfügbar sind:
find /usr/something/* /usr/something/.[!.]* /usr/something/..?* \
-prune -type f -user antoine -exec zip -r /tmp/file.zip {} +
find
rekursiv in Unterverzeichnisse. Um dies zu vermeiden, -prune
weist es an, nicht in die Verzeichnisse abzusteigen, auf die es stößt. Das ist nicht gut, wenn ich renne, find /usr/something -type d -prune -o …
weil dann /usr/something
übersprungen würde. Also führe ich find
alle Einträge in diesem Verzeichnis aus, außer .
und ..
.
Eine einfachere Redewendung ist es, in das Verzeichnis zu wechseln und das Startverzeichnis .
speziell zu behandeln. Hier würde es das resultierende Archiv ändern, das ./foo
stattdessen Pfade der Form hätte usr/something/foo
. Diese Technik basiert auf der Tatsache, dass -name .
nur das Startverzeichnis übereinstimmt und jede andere angetroffene Datei ihren eigenen Namen hat.
cd /usr/something &&
find . ! -name . -prune -type f -user antoine -exec …
Beachten Sie, dass zip
dies mehrmals ausgeführt werden kann, wenn die Liste der Dateinamen für einen einzelnen Aufruf zu lang ist. Dies ist in Ordnung, da zip -r
vorhandene Dateien im Archiv ersetzt werden. Wenn Sie einen anderen Archivierer verwenden, achten Sie darauf, ihn nicht in einem Modus aufzurufen, in dem ein neues Archiv erstellt wird (z. B. nicht verwenden tar -c
).
find -user antoine
als Argumente zum Komprimieren verwenden.zip
Leider gibt es keine Option zum Lesen von NUL-getrennten Dateinamen und daher können Dateien mit Leerzeichen und Zeilenumbrüchen im Namen nicht sehr gut verarbeitet werden, wenn sie von einem anderen Befehl bereitgestellt werden. Alternativ können Sie ein Python-Skript schreiben, es verfügt über ein gutes Zip-Modul und spezielle Dateinamen können problemlos verarbeitet werden.