findコマンドで生成されたファイルのリストがあります。これを使用して/tarファイルを圧縮して元のファイルを削除するにはどうすればよいですか?

findコマンドで生成されたファイルのリストがあります。これを使用して/tarファイルを圧縮して元のファイルを削除するにはどうすればよいですか?

コマンドのファイルのリストがありますfind。 /tarファイルを圧縮して元のファイルを削除する方法は?結果:find . -type f -exec egrep "mxprod|nlsoprdc" {} /dev/null \;ファイルを圧縮して元のファイルを削除する方法は?

ベストアンサー1

GNUツールを使用すると、次のことができます。

find . -type f -exec grep --null -El 'mxprod|nlsoprdc' {} + |
  tar --xz -cf /path/to/file.tar.xz --remove-files --null -T -

特定の用途にはこれを放棄してGNUをfind使用できます。grep-r

grep -r --null -El 'mxprod|nlsoprdc' . |
  tar --xz -cf /path/to/file.tar.xz --remove-files --null -T -

見つかったファイルを含むディレクトリは、アーカイブのメンバーとして追加されません。アーカイブを抽出すると再生成されますが、元のメタデータ(所有権、権限、ACL、その他の属性...)は使用されません。

次の手順でこの問題を解決できます。

grep -r --null -El 'mxprod|nlsoprdc' . |
  awk -F/ -v RS='\0' -v ORS='\0' '{
    p=""; sep=""
    for (i = 1; i < NF; i++) {
      p = p sep $i; sep=FS
      if (! (p in dirs)) {
        print p
        dirs[p]
      }
    }
    print}' |
  tar --xz -cf /path/to/file.tar.xz --no-recursion --remove-files --null -T -

tar空でないため削除できないディレクトリに関するエラーが表示されます。

それにもかかわらず、ファイルシステムがいっぱいになると、そのファイルを削除したxz後にそのファイルの出力が記録されない可能性があるため、危険です。tar

アーカイブが正しく作成されたことを確認した後にのみ、ファイルの削除を開始するのが最善です。

おすすめ記事