我正在为每个站点的多台机器部署文件,因此对我来说,将所有文件压缩一次并部署到每台机器要容易得多。但是我想删除所有其他 PC 的配置。
该 zip 包含各种通用文件,以及每台机器的特定配置。
例如较少的 zip 文件将提供:
generic1.xjson
generic2.xjson
generic3.xjson
generic1.yjson
generic2.yjson
PC-1-1.json
PC-1-2.json
PC-1-3.json
因此,我希望删除每个不包含 PC 主机名的 PC-1-*.json。
(PC 主机名始终是 PC-1-1,等等)
我试图做类似的事情:
ls -1 | grep -v *$hostname* | xargs -0 rm *PC-*-*.json
这将删除所有文件,包括当前主机名的文件。
寻找我在这方面犯了什么错误,或者是否有更好的方法来实现此功能。
答案1
您的命令无法按预期工作,因为rm *PC-*-*.json
!它会通过 shell 扩展并包含所有PC-x-x.json
文件。
其实是你使用的xargs
方式错误。
像这样的事情应该可以完成这项工作:
ls -Q1 | grep -v $hostname | grep -E "PC-1-[0-9]+\.json" | xargs echo
echo
当rm
你确定它有效时就改变。
更好的解决方案是使用find
:
find -type f -name "PC-*-*.json" -not -name "*$hostname*" -exec rm -i {} +
- 确定该命令正常工作后再
-i
删除。rm