Puedes usar el %P
formato en el -printf
directiva:
find ${rootDir} -name '*.doc' -printf "%P\n"
mostrará en su ejemplo:
subdir/test.doc
second.doc
A continuación, puede utilizar este find
lista en un for
expresión, para ejecutar nuestro comando exec, como en:
for f in $( find ${rootDir} -name '*.doc' -printf "%P\n" );
do
tar rvf docs.tar ${f}
done
Si ejecuta find
desde el directorio raíz deseado y no especifique un punto de partida absoluto en find
's, generará rutas relativas al tar
invocaciones de comandos que construye. Así:
cd $rootDir
find . -name '*doc' -exec tar rvf docs.tar {} \;
Si no desea cambiar el directorio de trabajo actual de forma permanente y está utilizando bash
o similar a tu caparazón que podrías hacer
pushd $rootDir
find . -name '*doc' -exec tar rvf docs.tar {} \;
popd
en su lugar.
Tenga en cuenta que pushd/popd no están presentes en todos los shells, así que consulte la página del manual según corresponda. Están presentes en bash pero no en la implementación base de sh, por lo que al usar explícitamente /bin/bash
puede confiar en ellos, no puede si un script solicita /bin/sh
en su lugar (ya que esto puede asignarse a un shell más pequeño que no tiene las mejoras de bash)