以下は意図したとおりに機能します。
$ find . -name .git -exec dirname '{}' \;
./google/guava
./JetBrains/intellij-community
./zsh-users/zsh-syntax-highlighting
ただし、以下はドットのみを返します。
$ find . -name .git -exec echo "$(dirname '{}')" \;
.
.
.
それはなぜですか$(dirname '{}')
、find -exec
コマンドでどのように使用できますか?
私はfind
GNUではなくUNIX (特に、OS XとFreeBSD)について質問していることに注意してください。
シェルがbeforefindを評価している$(dirname)
ため、このコマンドが実行されます。
find . -name .git -exec echo . ;
もちろん、自分で別のシェルを呼び出すことで、find内でシェル拡張を使用できます(または、必要なシェルをshebangとして使用してスクリプトを呼び出すこともできます)。
言い換えると:
find . -name .git -exec sh -c 'dirname {}' \;
なしのソリューションdirname
(POSIX、より高速、呼び出すサブプロセスが1つ少ない):
find . -name .git -exec sh -c 'path={}; echo "${path%/*}" ' \;
コーミング/ U / tripleeeの答えを見つけるの最適化で(私を彼にないupvote):
find . -name .git -exec sh -c 'for f; do echo "${f%/*}"; done' _ {} \+
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加