
コマンドのファイルのリストがあります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
アーカイブが正しく作成されたことを確認した後にのみ、ファイルの削除を開始するのが最善です。