ตัวเลือกใดที่ฉันต้องใช้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ให้คุณเพิกเฉยโดยปริยาย