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)