आंशिक रूप से, आप कर सकते हैं:
find . -type d -exec sh -c '
for dir do
[ -f "$dir/README" ] || printf "%s\n" "$dir"
done' sh '{}' +
[ -f file ]
यदि फ़ाइल मौजूद है और एक नियमित फ़ाइल (सिम्लिंक रिज़ॉल्यूशन के बाद) होने की पुष्टि की जाती है।
यदि आप परीक्षण करना चाहते हैं कि यह केवल (उस निर्देशिका में एक प्रविष्टि के रूप में) मौजूद है, तो इसके प्रकार की परवाह किए बिना, आपको इसकी आवश्यकता होगी:, [ -e file ] || [ -L file ]
हालांकि ध्यान दें कि आपको उन परीक्षणों को करने के लिए निर्देशिका की खोज अनुमति की आवश्यकता है। आप [ -x "$dir" ]
उन मामलों के लिए कुछ परीक्षण जोड़ना चाह सकते हैं जैसे:
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 '{}' +
या दौड़ की स्थिति से बचने के लिए 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 '{}' +
यह भी देखें कि मैं कैसे बताऊँ कि क्या एक नियमित फ़ाइल बैश में मौजूद नहीं है? इतने पर।