ยกเว้นไฟล์ที่ซ่อนอยู่เมื่อค้นหาด้วย Unix / Linux พบไหม


35

ตัวเลือกใดที่ฉันต้องใช้findเพื่อแยกไฟล์ที่ซ่อนอยู่ออก


4
นอกเหนือ:เหตุผลที่ไม่มีการสนับสนุนพิเศษสำหรับงานนี้คือสิ่งเดียวที่พิเศษเกี่ยวกับไฟล์ที่มีชื่อ 'นำ' คือว่าไม่ได้ถูกระบุไว้โดยlsเว้นแต่จะได้รับการร้องขอเป็นพิเศษ: มันเป็นไฟล์ธรรมดาโดยสมบูรณ์ในทุก ๆ ด้านมันเป็นเพียงแค่การlsให้คุณเพิกเฉยโดยปริยาย
dmckee

2
คำถาม: คุณต้องการซ่อนอะไรเช่นนี้.hidden/visible.txtหรือไม่?
Keith Thompson

คำตอบ:


14

ฉันพบสิ่งนี้ที่นี่ :

find . \( ! -regex '.*/\..*' \) -type f -name "whatever"

ทำไมไม่เพียง\( ! -name '.*' \)?
grawity

@Grawity ฉันเพิ่งพบว่าฉันไม่ทราบว่ามันทำงานอย่างไร คุณจะไม่เพียง แต่ซ่อนไฟล์ที่ซ่อนอยู่ แต่ไดเรกทอรีที่ซ่อนอยู่และเนื้อหาย่อยทั้งหมดและไฟล์ที่ซ่อนอยู่ในโฟลเดอร์ย่อย?
Jarvin

5
ไม่มันจะไม่: / แต่\( ! -path '*/.*' \)จะ
grawity

@ grawity Ya ฉันเดาว่าฉันได้ตั้งสมมติฐานเกี่ยวกับสิ่งที่ OP ต้องการ ... วิธีแก้ปัญหาชื่อของคุณน่าจะใกล้เคียงที่สุดกับสิ่งที่พวกเขาขอ
Jarvin

@ grawity & Dan: ไม่ใช่ (! -path '^. *') ?? โซลูชันของคุณจะไม่สนใจไฟล์ใด ๆ ที่มี '.' ที่ใดก็ได้ในชื่อไฟล์เช่น a.exe, b.out ฯลฯ ....
Software Mechanic

13

ดูเหมือนว่ารูปแบบการปฏิเสธ glob ไม่เป็นที่รู้จักกันดี ดังนั้นคุณสามารถใช้:

find . -name "[!.]*"

12

นี่ไม่ได้ตอบคำถามของคุณ แต่สำหรับงานในการค้นหาไฟล์ที่ไม่ได้ซ่อนฉันต้องการให้ค้นหาไฟล์ทั้งหมดแล้วกรองด้วย grep

find . -type f | grep -v '/\.'

คล้ายกับแนวทางของคุณ แต่อาจจะง่ายกว่าเล็กน้อย


นี่เป็นหนึ่งใน liners เดียวที่ทำงานสำหรับฉัน
ร่วม

7

ลองใช้ต่อไปนี้find:

find . -type f -not -path '*/\.*'

ซึ่งจะเพิกเฉยต่อไฟล์ที่ซ่อนอยู่ทั้งหมด (ไฟล์และไดเรกทอรีที่ขึ้นต้นด้วยจุด)


1

ฉันเขียนสคริปต์ที่เรียกว่า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


1
การเข้ารหัสที่ดี ยกเว้นเมื่อฉันลองfindnh ~/.hiddendir/ฉันไม่ได้อะไรเลย นอกเหนือจากนั้นสิ่งนี้แตกต่างจาก! -path '*/.*'และfind … | grep -v '/\.'อย่างไร
G-Man กล่าวว่า 'Reinstate Monica'

1

หากคุณมีจุดมุ่งหมายคือการfindและgrep, ripgrepไม่ยกเว้นไฟล์ที่ซ่อนอยู่โดยค่าเริ่มต้นเช่น

rg --files

--files พิมพ์แต่ละไฟล์ที่จะค้นหาโดยไม่ทำการค้นหาจริง


1

fd

การใช้งานง่ายมีทางเลือกมากขึ้นเร็วขึ้นและใช้งานง่ายเพื่อfd findโดยค่าเริ่มต้นมัน:

  • ละเว้นไดเรกทอรีและไฟล์ที่ซ่อนอยู่ตามค่าเริ่มต้น
  • ละเว้นรูปแบบจากคุณ.gitignoreโดยค่าเริ่มต้น

ตรวจสอบการวิเคราะห์เกณฑ์มาตรฐาน


1

วิธีค้นหาไฟล์ที่ซ่อนอยู่:

find -name '[.]*'

วิธีค้นหาไฟล์ที่มองเห็นได้:

find -name '[!.]*'

มันง่ายมาก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.