![如何使用“或”选项来对文件进行分类](https://linux22.com/image/100979/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E2%80%9C%E6%88%96%E2%80%9D%E9%80%89%E9%A1%B9%E6%9D%A5%E5%AF%B9%E6%96%87%E4%BB%B6%E8%BF%9B%E8%A1%8C%E5%88%86%E7%B1%BB.png)
我有一个像这样的文件名
/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 匹配,或者如果存在的三个文件中可能不止一个(而您只需要一个),这没有考虑所有这些可能性。但这肯定是最简单的方式。