Můžete použít %P ve formátu -printf směrnice:
find ${rootDir} -name '*.doc' -printf "%P\n"
se ve vašem příkladu zobrazí:
subdir/test.doc
second.doc
Potom můžete použít tento find seznam v for výraz, aby bylo možné spustit náš příkaz exec, jako v:
for f in $( find ${rootDir} -name '*.doc' -printf "%P\n" );
do
tar rvf docs.tar ${f}
done
Pokud spustíte find z požadovaného kořenového adresáře a nezadávejte absolutní počáteční bod v find 's, vypíše relativní cesty k tar vyvolání příkazů, které vytváří. Asi takhle:
cd $rootDir
find . -name '*doc' -exec tar rvf docs.tar {} \;
Pokud nechcete trvale změnit aktuální pracovní adresář a používáte bash nebo podobně jako váš shell můžete udělat
pushd $rootDir
find . -name '*doc' -exec tar rvf docs.tar {} \;
popd
místo toho.
Všimněte si, že pushd/popd nejsou přítomny ve všech shellech, takže podle potřeby zkontrolujte manuálovou stránku. Jsou přítomny v bash, ale ne v základní implementaci sh, takže když explicitně používají /bin/bash můžete se na ně spolehnout, ale nemůžete, pokud skript požaduje /bin/sh místo toho (protože se to může namapovat na menší shell, který nemá vylepšení bash)