execが期待どおりに機能しない場合

execが期待どおりに機能しない場合

フォルダがあることを確認し、フォルダがある場合は1つの操作を実行し、ない場合は別の作業を実行する必要があります。これを行うにはfindを使用しますが、正しい方法が見つかりません。

find /path/to/destination -maxdepth 1 -type d -name "dir*" -exec bash -c '[[ $1 ]] && echo ok || echo "not ok"' _ {} \;

しかし、bash部分の部分は、実装するためにより新しいです。提案はありますか?

ベストアンサー1

これは、前の条件(and)と一致するファイルに対してのみ実行され、ファイル-execごとに1回実行されます。-name 'dir*'-type d

ここでは、次のことができますzsh

dirs=(/path/to/destination/dir*(N/))
if (($#dirs)); then
  echo Found these dirs:
  printf ' - %s\n' $dirs
else
  echo >&2 No dir found
fi

または、bashバージョン4.4以降とfind互換性のあるGNUを使用している場合(-maxdepth使用時にすでにGNU拡張を使用している必要があります):

readarray -td '' dirs < <(
  find /path/to/destination -maxdepth 1 -type d -name "dir*" -print0)

if ((${#dirs[@]})); then
  echo Found these dirs:
  printf ' - %s\n' "${dirs[@]}"
else
  echo >&2 No dir found
fi

おすすめ記事