質問: 「検索」出力で相対パスのみを強制するにはどうすればよいですか? 複数のディレクトリにある特定の拡張子を持つファイルを1つのtar-ballに圧縮できるスクリプトを作成しようとしています。現在、スクリプトファイルにあるものは次のとおりです。find "$rootdir" -name '*doc' -exec tar rvf docs.tar {} \; ここで、$rootdirは検索するベースパスです。パスがtarファイルで絶対パスであることを除いて、これは問題ありません。パスは$rootdirからの相対パスを使用します。これを行うにはどうすればよいですか?現在のtar -tf docs.tarの例$rootdirは/home/username/test出力です:home/username/test/subdir/test.doc home/username/test/second.doc 私が出力にしたいこと:./subdir/test.doc ./second.doc
回答: 目的のルートディレクトリから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はすべてのシェルに存在するわけではないので、必要に応じてmanページを確認してください。それらはbashには存在しますが、ベースのsh実装には存在しないため、/bin/bashを明示的に使用している間は、スクリプトが/bin/shを要求した場合は信頼できません(これはより小さなシェルにマップされる場合があるため) bashの拡張機能はありません)