フォルダがあることを確認し、フォルダがある場合は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