我可以访问包含多个用户帐户的CentOS网络服务器。这些用户可以在自己的文件系统分支中的任何地方拥有php.ini文件 - 而不仅仅是在他们的主目录中。我试图找到一种简单而优雅的方式(最好使用bash实用程序)来测试php.ini文件是否存在于文件系统的单个用户分支中的任何位置。
以下示例显示了我能够设计的两种方法,但每种方法都有其缺点使它们无法使用:
# Does not work as intended
# Always echoes "Found" because find returns 0 even if it didn't find php.ini
if find . -name php.ini; then echo "Found"; fi
# Does not work if php.ini is in a subdirectory
# This test only works on the current working directory
if [ -e php.ini ]; then echo "Found"; fi
假设当前工作目录为〜(/ home / user)且php.ini文件位于〜/ public_html中,则每个目录的输出为:
# First, if the php.ini is named php.ini:
cdsynth@cdsynthetics.com [~]# if find . -name php.ini; then echo "Found"; fi
./public_html/php.ini
Found
# After renaming php.ini to php.ini.bak to test find's exit status:
cdsynth@cdsynthetics.com [~]# if find . -name php.ini; then echo "Found"; fi
Found
# And using the -e file test operator, with php.ini correctly named:
cdsynth@cdsynthetics.com [~]# if [ -e php.ini ]; then echo "Found"; fi
有关如何使用主要使用bash实用程序进行此操作的任何想法?
答案 0 :(得分:4)
检查find
是否输出任何内容:
if [[ $(find . -name php.ini) ]]
then
echo "Found"
fi
使用GNU find
,您还可以在找到匹配项时立即退出:
if [[ $(find . -name php.ini -print -quit) ]]
then
echo "Found"
fi
答案 1 :(得分:1)
if [ -e "$(find . -name 'php.ini' | head -1)" ] ; then echo "Found"; fi
双引号是必要的,因为[ -e ]
以代码0退出。