我正在尝试查找iPhone应用程序目录中是否存在文件
不幸的是,apps目录与设备不同
在我的设备上,我使用以下命令查看文件是否存在:
if [[ -f "/var/mobile/Applications/D0D2B991-3CDA-457B-9187-1F02A84FF3AB/AppName.app/filename.txt" ]]; then
echo "The File Exists";
else
echo "The File Does Not Exist";
fi
我想要一个命令,它会自动搜索文件是否存在而无需指定"变量"路径中的名字。
我试过了:
if [[ -f "/var/mobile/Applications/*/AppName.app/filename.txt" ]]; then
echo "The File Exists";
else
echo "The File Does Not Exist";
fi
但没有运气,它没有找到档案,
也许是因为我克隆了应用程序,因此我有/var/mobile/Applications/*/AppName.app/
的2条路径。
我想找到一种方法,能够找到文件filename.txt
是否存在于此目录AppName.app
中名为/var/mobile/Applications/*/
的任何文件夹中
答案 0 :(得分:2)
您可以按照以下方式执行此操作:
[[ $(find /var/mobile/Applications/*/AppName.app/ -name filename.txt -print -quit | wc -l) -gt 0 ]] && echo "The File Exists" || echo "The File Does Not Exist"
答案 1 :(得分:2)
-f
测试只能接受一个参数。你需要将它放在循环中以检查是否存在一些glob并且它匹配一些常规文件,即
shopt -s nullglob
found=
for file in /var/mobile/Applications/*/AppName.app/filename.txt; do
[[ -f $file ]] && found=: && break
done
[[ -n $found ]] && echo "The File Exists" || echo "The File Does Not Exist"
如果您不确定文件的具体位置,可以使用find,执行以下操作,如果找到则会提前退出。 (应该适用于gnu
find,尚未在bsd
上进行测试
if [[ -f $(find /some_root_directory -type f -name 'filename.txt' -print -quit) ]]; then
echo "The File Exists"
else
echo "The File Does Not Exist"
fi
答案 2 :(得分:1)
# if a glob matches nothing, remove it instead of leaving the literal glob
shopt -s nullglob
# stick all matches in an array
files=( /var/mobile/Applications/*/AppName.app/filename.txt )
case "${#files[@]}" in
0 ) echo "Sorry, no such file." ;;
1 ) echo "The file exists: ${files[0]}" ;;
* ) echo "There are multiple files matching this pattern: ${files[*]}" ;;
esac
答案 3 :(得分:0)
我喜欢这种技术:
if find /var/mobile/Applications/*/AppName.app/ -name filename.txt -print -quit | grep -q .; then
echo "The File Exists"
else
echo "The File Does Not Exist"
fi
这比这种形式有一些优势:
[[ $(find ..... -print -quit | wc -l) -gt 0 ]]
由于:
$()
子shell wc
-gt
运算符[[ ... ]]
基本上它是find ... | grep -q .
与[[ $(find ... | wc -l) -gt 0 ]]
或find ... | grep -q .
与[[ -f $(find ...) ]]