Ich versuche, ein Skript zu erstellen, das Dateien mit einer bestimmten Erweiterung in einer Reihe von Verzeichnissen in eine einzige Zielgruppe komprimieren kann. Derzeit habe ich in der Skriptdatei Folgendes:
find "$rootDir" -name '*doc' -exec tar rvf docs.tar {} \;
Wo $rootDir
ist der Basispfad für die Suche?
Dies ist in Ordnung, außer dass die Pfade in der TAR-Datei absolut sind. Ich würde es vorziehen, wenn die Pfade relativ sind $rootDir
. Wie würde ich das machen?
Beispiel Strom , tar -tf docs.tar
wo $rootDir
ist /home/username/test
output:
home/username/test/subdir/test.doc
home/username/test/second.doc
Was ich mir von der Ausgabe wünsche:
./subdir/test.doc
./second.doc
cd $rootDir
undcd -
(zumindest inbash
).( cd $rootDir ; find ... )
wäre auch möglich, also alles in einer Subshell zu machen.Sie können das
%P
Format in der-printf
Direktive verwenden:In Ihrem Beispiel wird Folgendes angezeigt:
Sie können diese
find
Liste dann in einemfor
Ausdruck verwenden, um unseren exec-Befehl auszuführen, wie in:quelle