Puoi usare il %P
formato nel -printf
direttiva:
find ${rootDir} -name '*.doc' -printf "%P\n"
visualizzerà nel tuo esempio:
subdir/test.doc
second.doc
Puoi quindi utilizzare questo find
elenco in un for
expression, per eseguire il nostro comando exec, come in:
for f in $( find ${rootDir} -name '*.doc' -printf "%P\n" );
do
tar rvf docs.tar ${f}
done
Se esegui find
dalla directory root desiderata e non specificare un punto di partenza assoluto in find
, produrrà percorsi relativi al tar
invocazioni di comandi che costruisce. In questo modo:
cd $rootDir
find . -name '*doc' -exec tar rvf docs.tar {} \;
Se non vuoi cambiare la directory di lavoro corrente in modo permanente e stai usando bash
o simile alla tua shell che potresti fare
pushd $rootDir
find . -name '*doc' -exec tar rvf docs.tar {} \;
popd
invece.
Nota che pushd/popd non sono presenti in tutte le shell, quindi controlla la pagina man come appropriato. Sono presenti in bash ma non nell'implementazione di base sh, quindi mentre usano esplicitamente /bin/bash
puoi fare affidamento su di loro non puoi se uno script richiede /bin/sh
invece (poiché questo potrebbe corrispondere a una shell più piccola che non ha i miglioramenti di bash)