%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 の拡張機能を持たない小さなシェルにマップされる可能性があるため)