gpt4 book ai didi

bash - 在 bash 中,文件操作符 (-f) 可以不区分大小写吗?

转载 作者:行者123 更新时间:2023-11-29 08:56:49 25 4
gpt4 key购买 nike

我正在做以下事情:

if [ -f $FILE ] ; then
echo "File exists"
fi

但我希望 -f 不区分大小写。也就是说,如果 FILE 是 /etc/somefile,我希望 -f 识别 /Etc/SomeFile

我可以使用 glob 部分解决它:

shopt -s nocaseglob
TARG='/etc/somefile'

MATCH=$TARG* #assume it returns only one match

if [[ -f $MATCH ]] ; then
echo "File exists"
fi

但不区分大小写的 globbing 仅适用于文件名部分,而不适用于完整路径。因此,如果 TARG 是 /Etc/somefile,它将不起作用。

有什么办法吗?

最佳答案

问题是您的文件系统 区分大小写。文件系统只提供两种获取文件的相关方法:要么指定一个准确的、区分大小写的文件名并以这种方式检查其是否存在,要么读取目录中的所有文件,然后检查每个文件是否与模式匹配。

换句话说,检查区分大小写的文件系统中是否存在不区分大小写的文件版本是非常低效的。 shell 可能会为您做这件事,但在内部它会读取目录的所有内容并根据模式检查每个内容。

考虑到所有这些,这是可行的:

if [[ -n $(find /etc -maxdepth 1 -iname passwd) ]]; then
echo "Found";
fi

但除非您想搜索从“/”开始向下的所有内容,否则您必须单独检查路径的组成部分。没有办法解决这个问题;您无法在区分大小写的文件系统上神奇地检查整个路径以查找不区分大小写的匹配项!

关于bash - 在 bash 中,文件操作符 (-f) 可以不区分大小写吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3211076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com