gpt4 book ai didi

linux - 移动并删除文件夹中所有匹配 grep 的文件

转载 作者:太空宇宙 更新时间:2023-11-04 10:07:58 25 4
gpt4 key购买 nike

这个命令:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com