删除文件名中不包含主机名的某些文件类型

删除文件名中不包含主机名的某些文件类型

我正在为每个站点的多台机器部署文件,因此对我来说,将所有文件压缩一次并部署到每台机器要容易得多。但是我想删除所有其他 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

echorm你确定它有效时就改变。

更好的解决方案是使用find

find -type f -name "PC-*-*.json" -not -name "*$hostname*" -exec rm -i {} +
  • 确定该命令正常工作后再-i删除。rm

相关内容