次のようなものが私が求めているものです。しかし、どのように脱出しても、私のコードは機能しません{}
。+
;
find ./ -maxdepth 1 -type d -name '.*' -exec \
find {} -maxdepth 1 -type f -name '*.ini' -exec \
md5sum \{\} \\; \;
これを見た後UnixとLinuxの問題、次のコードは動作しますが、入れ子になっていません。探すだから私はこの特定のタスクを実行するより良い方法があると思います。
find ./ -maxdepth 1 -type d -name '.*' \
-exec bash -c 'for x; do
find "$x" -maxdepth 1 -type f -name "*.ini" \
-exec md5sum \{\} \;; \
done' _ {} \+
find -exec
上記のように、シェルと奇妙な引用とエスケープ制約を呼び出さずに入れ子にする方法はありますか?
それとも、複数のパラメータを混合して単一のfindコマンドで直接実行できますか?
ベストアンサー1
次の単一の検索を試してみましょう。
find .*/ -maxdepth 1 -type f -name '*.ini' -execdir md5sum {} +
または(find
まったくない、シェルワイルドカードのみを使用)
md5sum .*/*.ini
ただし、ここにはチェックがありません。 で-type f
終わるディレクトリ/非ファイルがない場合にのみ機能します.ini
。これにより使用できます。
for x in .*/*.ini; do
if [ -f "$x" ]; then
md5sum "$x"
fi
done
しかし、これは1回のmd5sum呼び出ししか必要とされないという利点を失います。
編集する
一般的で安全な接続方法の場合は、find
次のようにできます。
find <paths> <args> -print0 | xargs -0 -I{.} find {.} <args for second find> [etc.]