我有一个来自find命令的文件列表。如何压缩/压缩文件并删除原始文件?结果来自:find . -type f -exec egrep "mxprod|nlsoprdc" {} /dev/null \;;我如何压缩文件并删除原始文件?
发布于 2017-08-10 07:01:40
使用GNU工具,您可以:
find . -type f -exec grep --null -El 'mxprod|nlsoprdc' {} + |
tar --xz -cf /path/to/file.tar.xz --remove-files --null -T -虽然对于find的特殊用法,您可以取消它,使用GNU grep's -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已经删除该文件之后为给定文件编写输出,这是很危险的。
最好是在确保正确创建存档之后才开始删除文件。
https://unix.stackexchange.com/questions/385148
复制相似问题