แสดงเฉพาะไฟล์ที่ขึ้นต้นด้วย (ซ่อน)


11

ฉันพยายามแสดงเฉพาะไฟล์ที่ซ่อนอยู่ แต่ไม่รู้ว่าจะทำอย่างไร

ใช้งานได้ (แต่การจับคู่ยังจุดในที่อื่น ๆ )

ls -la | grep '\.'

พยายามเพิ่ม^แต่ไม่พบวิธีแก้ปัญหา


1
การแยกวิเคราะห์lsไม่ใช่ความคิดที่ยอดเยี่ยม แต่สิ่งที่คุณพยายามจะทำงานถ้าคุณใช้สมอ^เพื่อแสดงจุดเริ่มต้นของการแข่งขัน ls -la | grep '^\.'
devnull

3
ไม่เช่นนั้นชื่อไฟล์ไม่ใช่จุดเริ่มต้นของบรรทัดที่มีแฟล็ก -l ls -la | awk '$9 ~ /^\./'จะ.
yoonix

คำตอบ:



5
find . -type f -name '\.*' -print 

จะต้องใช้งานได้หากคุณต้องการแสดงรายการทุกไฟล์ที่ซ่อนอยู่ในลำดับชั้นของไดเรกทอรี


2

หากคุณต้องการแยกวิเคราะห์lsผลลัพธ์คุณต้องเพิ่ม^ที่จุดเริ่มต้นของ regex และไม่ใช้-lตัวเลือก การใช้-lสาเหตุแต่ละบรรทัดเอาต์พุตเริ่มต้นด้วยข้อมูลไฟล์หรือโฟลเดอร์ไม่ใช่ชื่อไฟล์หรือโฟลเดอร์ ดังนั้นคุณควรใช้ดังนี้:

ls -Ad | grep '^\.'

หรือคุณสามารถทำได้ด้วยprintfbash builtin:

printf "%s\n" .*

หากคุณใช้zshคุณสามารถใช้:

print -l .*

1

ต่อไปนี้เป็นสองวิธีในการค้นหาไฟล์ที่ซ่อนอยู่เท่านั้น

find . -maxdepth 1 -name ".*" -type f -ls

หรือ

find . -maxdepth 1 -name ".*" -type f -printf "%P \n"

ใช้-maxdepthเพื่อระบุระยะเวลาที่คุณต้องการค้นหาในแผนผังไดเรกทอรี


1

การปรับปรุงคำตอบของ Flup :

ls -lad .[!.]* ..?*

นี้จะแสดงรายการไฟล์ทั้งหมดที่มีชื่อขึ้นต้นด้วยจุดและที่มีค่ามิได้...

โปรดทราบว่าหากคุณต้องการไพพ์เอาท์พุทของlsถึงgrep(ซึ่งตามที่ระบุโดย devnullจะไม่เป็นความคิดที่ดี) ให้แน่ใจว่าคุณใช้\lsหรือcommand lsเพราะถ้าlsเป็นนามแฝงเพื่อแสดงเอาต์พุตสี (เช่น Debian เป็นตัวอย่าง) เอาท์พุตประกอบด้วย ANSI escape sequences เพื่อสร้างเอาท์พุตสีซึ่งจะทำให้การค้นหาของคุณดีขึ้นgrepหากรูปแบบของมันถูกยึดไว้ที่จุดเริ่มต้นของบรรทัด


1
คุณสามารถใช้-A(แทนที่จะ-a) เพื่อเพิกเฉย., ...
OJFord

@ OJFord + -Aแตกต่างจาก-aสำหรับไดเรกทอรีที่lsสืบทอดมา แต่ทั้งคู่จะถูกละเว้น (เท่ากัน) และไร้ประโยชน์สำหรับชื่อที่ระบุในบรรทัดคำสั่งที่มี-dผลบังคับใช้ นอกจากนี้หากใช้lsนามแฝง--color=auto แล้วการวางท่อก็โอเค เท่านั้น--color=alwaysหรือ--colorทำให้เกิดปัญหา
dave_thompson_085

0

วิธีการแก้ปัญหาของ val0x00ff นั้นดีมาก แต่ก็ลืมการซ่อนไดเรกทอรี

หากคุณต้องการไฟล์ที่ ซ่อนอยู่และ ไดเรกทอรีที่ซ่อนอยู่โดยไม่ต้อง และ .. :

find -maxdepth 1 -regex '\./\..+' -printf "%P\n"

ข้อเสนอแนะของคุณล้มเหลวบน VMware ESXi (ไม่มีรายการไฟล์และไม่มีไดเรกทอรี) และการเรียงลำดับของความล้มเหลวบน Linux ด้วย (ด้วย maxdepth> 1 มันยังแสดงรายการไฟล์ใด ๆ ในไดเรกทอรีที่ขึ้นต้นด้วย a) แต่มันใช้ได้ทั้ง Linux และ ESXi: find . \( -type f -o -type d \) -name '\.*' -print; ใช้ในmaxdepthกรณีที่จำเป็น
Jeroen Wiert Pluimers

0

ด้านล่างมีขนาดกะทัดรัดและรองรับหลายรุ่น

1) แสดงไฟล์ที่ซ่อนอยู่ไดเรกทอรีและไดเรกทอรีย่อย

find . | grep "^\./\."

2) แสดงไดเรกทอรีที่ซ่อนอยู่และไดเรกทอรีย่อยเท่านั้น

find . -type d | grep "^\./\."

3) แสดงไฟล์ที่ซ่อนเฉพาะในปัจจุบันและไดเรกทอรีย่อย

find . -type f | grep "^\./\."

4) แสดงไฟล์และไดเรกทอรีที่ซ่อนอยู่ในโฟลเดอร์ปัจจุบัน

find . -maxdepth 1 | grep "^\./\."


0

คุณสามารถลอง:

find . -maxdepth 1 -type f -name '\.*' -print
find . -maxdepth 1 \( -type f -o -type d \) -name '\.*' -print

แน่นอนคุณสามารถใช้maxdepthค่าที่แตกต่างหรือลบออกอย่างสมบูรณ์ มีประโยชน์มากถ้าคุณต้องการสำรวจระหว่างไดเรกทอรี ( -type d) หรือไฟล์ปกติ( type f) หรือทั้งสองอย่างและรวมกับฟังก์ชั่นอื่น ๆ เช่น:

(เช่นเวลาที่แก้ไขล่าสุดตามตัวอย่าง@piroux - เสร็จสมบูรณ์โดย@ jeroen-wiert-pluimers )

find . -maxdepth 1 \( -type f -o -type d \) -name '\.*' -exec stat -c %y {} \; -printf "%P\t"

-1

คุณสามารถลอง :

ls -a |grep -E  "^\."

^ ระบุว่าเป็นจุดเริ่มต้นของเนื้อหาที่มี regexp


1
ซ้ำของคำตอบอื่นจาก 3 ปีที่ผ่านมา ...
เจฟฟ์ Schaller

ฉันเห็นคำตอบก่อนหน้ามันไม่ซ้ำกันและแน่นอน "ls -a" และ "ls -Ad" ไม่มีความหมายเหมือนกัน "-a" หมายถึงรายการทั้งหมดรวมถึงไฟล์ / ไดเรกทอรีที่ขึ้นต้นด้วย "." - หมายถึงรายการทั้งหมดยกเว้นการยกเว้น "." , ".. " และเนื้อหาไดเรกทอรี
Lingjing ฝรั่งเศส
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.