tar - 抽出されたファイルのリスト

tar - 抽出されたファイルのリスト

どのようにファイルを抽出できますか?.tar.gz抽出されたファイルの痕跡を保持しながら保存しますか?

たとえば、次のようなファイル構造があるとします。

ROOT
 ╠═▶ children
 ║    ╠═▶ joe.txt
 ║    ╚═▶ george.txt
 ╠═▶ bar.txt
 ╠═▶ foo.txt
 ╚═▶ A̲R̲C̲H̲I̲V̲E̲.t̲a̲r̲.b̲z̲
      ├─▷ children
      │    ├─▷ joe.txt
      │    └─▷ bob.txt
      ├─▷ hello.txt
      ├─▷ world.txt
      └─▷ foo.txt

これで、最新のファイルを保持しながらアーカイブからファイルを抽出する場合は、どのようなファイルが抽出されたかを知りたいと思います。
tar xf ./ARCHIVE.tar.gz --keep-newer-files | xargs -I EXTRACTED_FILE echo EXTRACTED_FILE

答え1

--to-commandこのオプションを使用して、抽出されたすべてのファイルの印刷をトリガーします。

引数は、環境変数TAR_FILENAMEを使用してファイル名を取得するコマンドです。STDIN

STDIN したがって、抽出されたファイルを読み込み、生成する必要があり、STDOUT生成されたファイルに印刷できます。

tar -xzf ../ARCH.tgz --keep-newer-files \
   --to-command="sh -c $(printf '%q' \
  'mkdir -p "$(dirname "$TAR_FILENAME")";dd of="$TAR_FILENAME" >/dev/null 2>&1;echo "#EXTRACTED#$TAR_FILENAME" ')" > output_tar.txt

抽出された各ファイルには1行がありますoutput_tar.txt

バラより外部プログラムへの書き込み詳しくは

答え2

私の要件に応じて、アーカイブコンテンツに一致する利用可能なすべての抽出ファイル(最新バージョンであるかどうか)を一覧表示する必要があります。

この場合、tar抽出が実行または実行されない場合は、効果的に抽出されたファイルを一覧表示できます。

私はこうする:

tar -xzf ./ARCH.tgz --keep-newer-files
for file in $(tar -tf ./ARCH.tgz 2>/dev/null)
do
  if [[ -e $file && ! -d $file ]]
  then
    echo $file
  fi
done > output_tar.txt

xargsを使用するあまり明確ではありませんが、きれいな解決策は次のとおりです。

tar -tf ./ARCH.tar 2>/dev/null | xargs -L1 bash -c 'if [[ -e $0 && ! -d $0 ]]; then echo $0; fi;'

関連情報