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より移植性が高い

1 つの結果しか期待できない場合は、 | を追加できます。head -n1、1行の長さだけのバッファーがいっぱいになると、ヘッドがパイプを強制終了します

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 に答える