Portable, Anda bisa melakukan:
find . -type d -exec sh -c '
for dir do
[ -f "$dir/README" ] || printf "%s\n" "$dir"
done' sh '{}' +
[ -f file ]
menguji apakah file tersebut ada dan dikonfirmasi sebagai file biasa (setelah resolusi symlink).
Jika Anda ingin menguji bahwa itu hanya ada (sebagai entri dalam direktori itu), terlepas dari jenisnya, Anda perlu [ -e file ] || [ -L file ]
:, meskipun perlu diketahui bahwa Anda memerlukan izin pencarian ke direktori untuk melakukan tes tersebut. Anda mungkin ingin menambahkan beberapa [ -x "$dir" ]
tes ke akun untuk kasus-kasus seperti:
find . -type d -exec sh -c '
for dir do
if [ -x "$dir" ]; then
[ -f "$dir/README" ] || printf "%s\n" "$dir"
else
printf >&2 "Cannot tell for \"%s\"\n" "$dir"
fi
done' sh '{}' +
Atau untuk menghindari kondisi balapan, dengan zsh
:
find . -type d -exec zsh -c '
zmodload zsh/system
for dir do
ERRNO=0
if [ ! -f "$dir/README" ]; then
if [ "$errnos[ERRNO]" = ENOENT ]; then
printf "%s\n" "$dir"
else
syserror -p "ERROR: $dir/README: "
fi
fi
done' zsh '{}' +
Lihat juga Bagaimana saya tahu jika file biasa tidak ada di Bash? pada SO.