แบบพกพาคุณสามารถทำ:
find . -type d -exec sh -c '
for dir do
[ -f "$dir/README" ] || printf "%s\n" "$dir"
done' sh '{}' +
[ -f file ]
ทดสอบว่ามีไฟล์อยู่ และได้รับการยืนยันว่าเป็นไฟล์ปกติ (หลังจากการแก้ปัญหา symlink)
หากคุณต้องการทดสอบว่ามีอยู่เท่านั้น (เป็นรายการในไดเรกทอรีนั้น) ไม่ว่าจะเป็นประเภทใดคุณจำเป็นต้อง: [ -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 '{}' +
ดูเพิ่มเติมฉันจะทราบได้อย่างไรว่าไฟล์ปกติไม่มีอยู่ใน Bash บนดังนั้น