ตัวเลือกใดที่ฉันต้องใช้find
เพื่อแยกไฟล์ที่ซ่อนอยู่ออก
.hidden/visible.txt
หรือไม่?
ตัวเลือกใดที่ฉันต้องใช้find
เพื่อแยกไฟล์ที่ซ่อนอยู่ออก
.hidden/visible.txt
หรือไม่?
คำตอบ:
ฉันพบสิ่งนี้ที่นี่ :
find . \( ! -regex '.*/\..*' \) -type f -name "whatever"
\( ! -name '.*' \)
?
\( ! -path '*/.*' \)
จะ
ดูเหมือนว่ารูปแบบการปฏิเสธ glob ไม่เป็นที่รู้จักกันดี ดังนั้นคุณสามารถใช้:
find . -name "[!.]*"
นี่ไม่ได้ตอบคำถามของคุณ แต่สำหรับงานในการค้นหาไฟล์ที่ไม่ได้ซ่อนฉันต้องการให้ค้นหาไฟล์ทั้งหมดแล้วกรองด้วย grep
find . -type f | grep -v '/\.'
คล้ายกับแนวทางของคุณ แต่อาจจะง่ายกว่าเล็กน้อย
ลองใช้ต่อไปนี้find
:
find . -type f -not -path '*/\.*'
ซึ่งจะเพิกเฉยต่อไฟล์ที่ซ่อนอยู่ทั้งหมด (ไฟล์และไดเรกทอรีที่ขึ้นต้นด้วยจุด)
ฉันเขียนสคริปต์ที่เรียกว่าfindnh
ฉันเชื่อว่าจัดการกรณีขอบบางอย่างดีกว่าคำตอบสำหรับคำถามนี้ที่ฉันสามารถค้นหาบนเว็บ
#!/bin/bash
declare -a paths
while [ $# -ne 0 ]; do
case "$1" in -*) break ;; esac
paths+=("$1")
shift
done
find "${paths[@]}" \( -name . -o -name .. -o \! \( -name '.*' -prune \) \) "$@"
ตัวอย่างเช่นคุณสามารถค้นหาไฟล์ที่ไม่ซ่อนและไดเรกทอรีภายในไดเรกทอรีที่ซ่อนอย่างชัดเจนที่ระบุมีคำสั่งเช่นfindnh ~/.hiddendir/
ซึ่งจะแสดงให้เห็นแต่ไม่~/.hiddendir/file
~/.hiddendir/.superhiddenfile
findnh ~/.hiddendir/
ฉันไม่ได้อะไรเลย นอกเหนือจากนั้นสิ่งนี้แตกต่างจาก! -path '*/.*'
และfind … | grep -v '/\.'
อย่างไร
หากคุณมีจุดมุ่งหมายคือการfind
และgrep
, ripgrep
ไม่ยกเว้นไฟล์ที่ซ่อนอยู่โดยค่าเริ่มต้นเช่น
rg --files
--files
พิมพ์แต่ละไฟล์ที่จะค้นหาโดยไม่ทำการค้นหาจริง
fd
การใช้งานง่ายมีทางเลือกมากขึ้นเร็วขึ้นและใช้งานง่ายเพื่อfd
find
โดยค่าเริ่มต้นมัน:
.gitignore
โดยค่าเริ่มต้นวิธีค้นหาไฟล์ที่ซ่อนอยู่:
find -name '[.]*'
วิธีค้นหาไฟล์ที่มองเห็นได้:
find -name '[!.]*'
มันง่ายมาก
ls
เว้นแต่จะได้รับการร้องขอเป็นพิเศษ: มันเป็นไฟล์ธรรมดาโดยสมบูรณ์ในทุก ๆ ด้านมันเป็นเพียงแค่การls
ให้คุณเพิกเฉยโดยปริยาย