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)