Portably, şunları yapabilirsiniz:
find . -type d -exec sh -c '
for dir do
[ -f "$dir/README" ] || printf "%s\n" "$dir"
done' sh '{}' +
[ -f file ]
Dosya eğer testler var ve onaylanır (sembolik link çözünürlükte sonra) düzenli dosyasını olmak.
Türüne bakılmaksızın, yalnızca var olduğunu (bu dizindeki bir girdi olarak) test etmek isterseniz, şunlara ihtiyacınız olacaktır: [ -e file ] || [ -L file ]
ancak bu testleri gerçekleştirmek için dizinde arama iznine ihtiyacınız olduğunu unutmayın. Bu [ -x "$dir" ]
gibi durumları hesaba katmak için bazı testler eklemek isteyebilirsiniz :
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 '{}' +
Veya yarış koşullarından kaçınmak için 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 '{}' +
Ayrıca bkz . Bash'te normal bir dosyanın bulunmadığını nasıl anlarım? bu yüzden.