Sie können den %P
verwenden Format im -printf
Direktive:
find ${rootDir} -name '*.doc' -printf "%P\n"
wird in Ihrem Beispiel angezeigt:
subdir/test.doc
second.doc
Sie können dann diesen find
verwenden Liste in einem for
Ausdruck, um unseren exec-Befehl auszuführen, wie in:
for f in $( find ${rootDir} -name '*.doc' -printf "%P\n" );
do
tar rvf docs.tar ${f}
done
Wenn Sie find
ausführen aus dem gewünschten Wurzelverzeichnis und geben Sie in find
keinen absoluten Startpunkt an 's Optionen gibt es relative Pfade zu tar
aus Befehlsaufrufe, die es erstellt. So:
cd $rootDir
find . -name '*doc' -exec tar rvf docs.tar {} \;
Wenn Sie das aktuelle Arbeitsverzeichnis nicht dauerhaft ändern möchten und bash
verwenden oder ähnlich wie Ihre Shell, die Sie tun könnten
pushd $rootDir
find . -name '*doc' -exec tar rvf docs.tar {} \;
popd
stattdessen.
Beachten Sie, dass pushd/popd nicht in allen Shells vorhanden sind, überprüfen Sie daher gegebenenfalls die Manpage. Sie sind in bash vorhanden, aber nicht in der Basis-sh-Implementierung, also während der expliziten Verwendung von /bin/bash
Sie können sich darauf verlassen, aber nicht, wenn ein Skript nach /bin/sh
fragt stattdessen (da dies möglicherweise auf eine kleinere Shell abgebildet wird, die nicht die Verbesserungen von bash hat)