私が使うとき
find . -type f -name "*.htm*" -o -name "*.js*" -o -name "*.txt"
あらゆる種類のファイルを探します。しかし、-exec
最後に追加すると、次のようになります。
find . -type f -name "*.htm*" -o -name "*.js*" -o -name "*.txt" -exec sh -c 'echo "$0"' {} \;
.txt
ファイルだけを印刷しているようです。私は何が間違っていましたか?
注:MINGW(Git Bash)を使用してください。
ベストアンサー1
探す。 -type f -name "*.htm*" -o -name "*.js*" -o -name "*.txt"
略語は次のとおりです。
探す。'('\ '('-f タイプ-ㅏ- 名前 "*.htm*"')'- モールド\ '('- 名前 "*.js*"')'- モールド \ '('- 名前 "*.txt"')'\ ')' -印刷
つまり、ないからだ。行動述語が指定されました(のみ状況)、-print
基準を満たすファイルの操作を暗黙的に追加します。
(しかし、これを行うと、非正規.js
ファイルが印刷されます(ファイル-type f
でのみ機能します.htm
)。
しかし:
探す。 -name "*.htm*" -o -name "*.js*" -o -name "*.txt"\ -exec sh -c 'echo "$0"' {}\;
略語は次のとおりです。
探す。'('-f タイプ-ㅏ- 名前 "*.htm*"')'- モールド\ '('- 名前 "*.js*"')'- モールド\ '('- 名前 "*.txt"-ㅏ-exec sh -c 'echo "$0"' {}\;')'
(多くの言語と同様find
)そして(-a
;省略時の暗黙的)が優先されます。または(-o
)、明示的な演算述語(ここ-exec
)を追加すると、-print
上から見た暗黙の演算がキャンセルされます。
希望する場所は次のとおりです。
find . '(' -name "*.htm*" -o -name "*.js*" -o -name "*.txt" ')' \
-type f \
-exec sh -c 'echo "$0"' {} \;
または:
find . '(' -name "*.htm*" -o -name "*.js*" -o -name "*.txt" ')' \
-type f \
-exec sh -c '
for i do
echo "$i"
done' sh {} +
sh
ファイルごとに1つずつ実行しないでください。
(-type f
インデックスノードから情報を取得するよりもコストがかかる-name
ため後ろにいくつかfind
の実装では、最適化のために内部的に並べ替えチェックを実行しますが)。