0

假设像这样的路径

/home/albfan/Projects/InSaNEWEBproJECT

尽管事实上不使用这样的名称。有没有办法以不敏感的方式检查路径?

我遇到了这个解决方案,但如果可能的话,我想找到一个内置或 gnu 程序。

function searchPathInsensitive {
 # Replace bar with comma (not valid directory character allowing parse dirs with spaces)
 #also remove first / if exist (if not this create a first empty element

 ORG="$1"
 if [ "${ORG:0:1}" = "/" ]
 then
  ORG="${ORG:1}"
 else
  ORG="${PWD:1}/$ORG"
 fi
 OLDIFS=$IF
 IFS=,
 for dir in ${ORG//\//,}
 do
  if [ -z $DIR ]
  then
   DIR="/$dir"
  else
   TMP_DIR="$DIR/$dir"
   DIR=$(/usr/bin/find $DIR -maxdepth 1 -ipath $TMP_DIR -print -quit)
   if [ -z $DIR ]
   then
    # If some of the path does not exist just copy the element
    # exit 1        
    DIR="$TMP_DIR"
   fi
  fi
 done
 IFS=$OLDIFS
 echo "$DIR"
}

使用它只需:

 (searching on my home)
$ searchPathInsensitive projects/insanewebproject
/home/albfan/Projects/InSaNEWEBproJECT

(inside a project)
$ searchPathInsensitive src/main/java/org/package/webprotocolhttpwrapper.java
/home/albfan/Projects/InSaNEWEBproJECT/src/main/java/org/package/WebProtocolHTTPWrapper.java

$ searchPathInsensitive src/main/resources/logout.png
/home/albfan/Projects/InSaNEWEBproJECT/src/main/resources/LogOut.PNG

我猜该解决方案与find -ipath有任何关系,因为我对该函数所做的只是搜索以不敏感方式给出的路径中的下一个元素

4

2 回答 2

1

我的错!我想我试过了

find -ipath 'projects/insanewebproject' 

但这里的诀窍是我必须使用

find -ipath './projects/insanewebproject'

./做了改变。谢谢!。

男人说-path-wholename更便携

如果您只期望一个结果,您可以添加 | head -n1,当它填充它的缓冲区时,导致这种方式 head 杀死管道,它只有一个行长

find -ipath './projects/insanewebproject'| head -n1
于 2012-10-18T11:09:28.347 回答
0

最简单的解决方案:

$ find . | grep -qi /path/to/something[^/]*$ 

但是,如果您有一些必须检查匹配文件的附加条件,您可以在grep里面运行find

$ find . -exec sh -c 'echo {} | grep -qi /path/to/something' \; -print

在这里,您将获得目录中的所有文件。如果您只想获取目录的名称:

$ find . -exec sh -c 'echo {} | grep -qi /path/to/something[^/]*$' \; -print

使用示例:

$ mkdir -p Projects/InSaNEWEBproJECT/src/main/resources/
$ find . -exec sh -c 'echo {} | grep -qi /projects/insanewebproject[^/]*$' \; -print
./Projects/InSaNEWEBproJECT
于 2012-08-08T10:45:19.203 回答