如何使用“或”选项来对文件进行分类

如何使用“或”选项来对文件进行分类

我有一个像这样的文件名

/etc/auto.abc on server 1
/etc/auto.def on server 2
/etc/auto.ghi on server 1

我正在为所有服务器编写一个脚本,并且我想捕获该文件。

示例:猫/etc/auto.abc/etc/auto.def/etc/auto.ghi。它应该能够获取存在的文件。

谢谢,

答案1

像这样的东西:

if [[ $(find . -name "auto*" -type f -maxdepth 1 -printf '\n' | wc -l) -eq 1 ]]
then
   cat auto*
else
   echo there are more files that match 'auto*'
fi

-printf '\n'是否可以正确处理包含换行符的文件名(请参阅这个答案)。else如果有超过 1 个文件与模式匹配,您应该处理这种情况-auto*这是您决定在这里做什么。

答案2

为什么不在尝试对文件运行操作之前使用脚本来检查文件是否存在?

#!/bin/bash
if test -f "/etc/auto.def"; then cat /etc/auto.def;
elif test -f "/etc/auto.ghi"; then cat /etc/auto.ghi;
elif test -f "/etc/auto.abc"; then cat /etc/auto.abc;fi

资料来源:

http://www.shellhacks.com/en/HowTo-Check-If-a-File-Exists

http://www.thegeekstuff.com/2010/06/bash-if-statement-examples/

答案3

您是否考虑过使用文件全局

最宽松的方式是:

cat /etc/auto*

但在你的情况下更好的是:

cat /etc/auto.???

当然如果可能还有其他不需要的文件与该 glob 匹配,或者如果存在的三个文件中可能不止一个(而您只需要一个),这没有考虑所有这些可能性。但这肯定是最简单的方式。

相关内容