%P を使用できます -printf の形式 ディレクティブ:
find ${rootDir} -name '*.doc' -printf "%P\n"
あなたの例に表示されます:
subdir/test.doc
second.doc
次に、この find を使用できます for のリスト 次のように、exec コマンドを実行するための式:
for f in $( find ${rootDir} -name '*.doc' -printf "%P\n" );
do
tar rvf docs.tar ${f}
done
find を実行すると find で絶対開始点を指定しないでください。 のオプション、それは tar への相対パスを出力します それが構築するコマンド呼び出し。そのように:
cd $rootDir
find . -name '*doc' -exec tar rvf docs.tar {} \;
現在の作業ディレクトリを永久に変更したくなく、bash を使用している場合 またはあなたができるシェルと同様
pushd $rootDir
find . -name '*doc' -exec tar rvf docs.tar {} \;
popd
pushd/popd はすべてのシェルに存在するわけではないので、必要に応じてマニュアル ページを確認してください。それらは bash には存在しますが、基本の sh 実装には存在しないため、 /bin/bash を明示的に使用している間 スクリプトが /bin/sh を要求する場合は信頼できません 代わりに (これは、bash の拡張機能を持たない小さなシェルにマップされる可能性があるため)