アーカイブを見つけてそのディレクトリに解凍します。

アーカイブを見つけてそのディレクトリに解凍します。

すべてのディレクトリにあるtarファイルを見つけ、1行のコマンドで解凍したいと思います。ホームディレクトリとは別に見つけることができます。ただし、そのファイルがあるディレクトリからのみ抽出できます。パイプを使用してこれら2つの操作を1行でどのように実行できますか?

find -name any.tar ; tar xf any.tarこれを試してみました。any.tarすべてのディレクトリで個別にファイルを見つけることができます。また、ファイルを個別に抽出しますが、そのファイルがあるディレクトリtar xfにのみ抽出します。any.tarこれら2つのコマンドを1行で実行して、any.tarコマンドがホームディレクトリでコンパイルされたときに見つけて抽出できるようにしたいと思います。

私はUnixに初めて触れました。助けてください。ありがとうございます。

答え1

これが役に立つかもしれません

find ./ -name '*.tar' -exec sh -c 'dir=$(dirname "$0"); tar -xvf "${0}" -C "${dir}"; done' {} \;

manページからtar

-C, --directory DIR
       change to directory DIR

答え2

同じ問題を検索するこのページが見つかりましたが、提案は直接機能しませんでしたが、少しだけ調整することで私のユースケースに適していました。

find . -name "*.tar" -exec sh -c 'tar xvf {} -C $(dirname {})' \;

答え3

最初に見つける必要があるのは次のとおりです。

ディレクトリ内のすべてのtarファイルを見つけるには、find $directory -iname "*.tar"次の点に注意する必要があります。-inameはgnu拡張子なので、gnuを使用しない場合は-name *.tar -o -name *.TARほぼ同じようにする必要があります。

今作業中のtarコマンドを追加します。

find $directory -iname "*.tar" -print0 | xargs -0 --max-args=1 tar xf

これにより、すべてのtarファイルが現在の作業ディレクトリに抽出されます。

関連情報