这个命令:
find buffer/ | grep -i $varname
返回文件名列表。我想将它们每个压缩到单独的 zip 文件中,然后
- 将这些压缩文件保存到文件夹
output/
(但每个文件都与原始文件同名,除了扩展名应该是.zip
) - 删除原始文件(响应
find buffer/| grep -i $varname
的文件)
编辑(@Cyrus):
我已经为此敲了 20 分钟,这是我能想到的最好的:
find buffer/ | grep -i $varname -exec zip "output/"'{}'.zip '{}' \;
最佳答案
看起来像是 xargs 的工作:
find buffer/ | grep -i "$varname" | xargs -n1 -I{} -- zip "output/{}.zip" {}
对于 varname=""
和文件夹 buffer
是这样创建的:
mkdir buffer
touch buffer/1 buffer/2
命令将执行:
zip output/buffer/1.zip buffer/1
zip output/buffer/1.zip buffer/2
您可能想从文件名中删除 buffer
部分,我们可以为此使用 sed 's#^buffer/##'
。我们可以指示 find 只列出带有 -type f
的文件。所以如下:
find buffer/ -type f | grep -i "$varname" | sed 's#buffer/##' | xargs -n1 -I{} -- zip "output/{}.zip" buffer/{}
将执行:
zip output/1.zip buffer/1
zip output/2.zip buffer/2
要删除原来的文件,我们可以这样做:
find buffer/ -type f | grep -i "$varname" | sed 's#buffer/##' | xargs -n1 -I{} -- bash -c 'zip "output/{}.zip" buffer/{}; rm "buffer/{}"'
如果你想遍历文件并做一些更高级的事情,你可以使用 while read line :
find buffer/ -type f | grep -i "$varname" | sed 's#buffer/##' \
| while read -r line; do
zip output/${line}.zip buffer/${line}
rm buffer/${line}
done
关于linux - 移动并删除文件夹中所有匹配 grep 的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51004905/