我有一个来自命令的文件列表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 -
尽管对于 的特定用法find
,您可以放弃它并使用 GNUgrep
的-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
最好仅在确保已正确创建存档后才开始删除文件。