Vous pouvez utiliser le %P
format dans le -printf
instruction :
find ${rootDir} -name '*.doc' -printf "%P\n"
s'affichera dans votre exemple :
subdir/test.doc
second.doc
Vous pouvez alors utiliser ce find
liste dans un for
expression, afin d'exécuter notre commande exec, comme dans :
for f in $( find ${rootDir} -name '*.doc' -printf "%P\n" );
do
tar rvf docs.tar ${f}
done
Si vous exécutez find
à partir du répertoire racine souhaité et ne spécifiez pas de point de départ absolu dans find
, il affichera des chemins relatifs vers le tar
invocations de commande qu'il construit. Comme ceci :
cd $rootDir
find . -name '*doc' -exec tar rvf docs.tar {} \;
Si vous ne souhaitez pas modifier définitivement le répertoire de travail actuel et que vous utilisez bash
ou similaire à votre shell, vous pourriez le faire
pushd $rootDir
find . -name '*doc' -exec tar rvf docs.tar {} \;
popd
à la place.
Notez que pushd/popd ne sont pas présents dans tous les shells, consultez donc la page de manuel le cas échéant. Ils sont présents dans bash mais pas dans l'implémentation de base sh, donc tout en utilisant explicitement /bin/bash
vous pouvez compter sur eux, vous ne pouvez pas si un script demande /bin/sh
à la place (car cela peut correspondre à un shell plus petit qui n'a pas les améliorations de bash)