ฉันพยายามแสดงเฉพาะไฟล์ที่ซ่อนอยู่ แต่ไม่รู้ว่าจะทำอย่างไร
ใช้งานได้ (แต่การจับคู่ยังจุดในที่อื่น ๆ )
ls -la | grep '\.'
พยายามเพิ่ม^
แต่ไม่พบวิธีแก้ปัญหา
ls -la | awk '$9 ~ /^\./'
จะ.
ฉันพยายามแสดงเฉพาะไฟล์ที่ซ่อนอยู่ แต่ไม่รู้ว่าจะทำอย่างไร
ใช้งานได้ (แต่การจับคู่ยังจุดในที่อื่น ๆ )
ls -la | grep '\.'
พยายามเพิ่ม^
แต่ไม่พบวิธีแก้ปัญหา
ls -la | awk '$9 ~ /^\./'
จะ.
คำตอบ:
ls -ld .*
จะทำในสิ่งที่คุณต้องการ
find . -type f -name '\.*' -print
จะต้องใช้งานได้หากคุณต้องการแสดงรายการทุกไฟล์ที่ซ่อนอยู่ในลำดับชั้นของไดเรกทอรี
หากคุณต้องการแยกวิเคราะห์ls
ผลลัพธ์คุณต้องเพิ่ม^
ที่จุดเริ่มต้นของ regex และไม่ใช้-l
ตัวเลือก การใช้-l
สาเหตุแต่ละบรรทัดเอาต์พุตเริ่มต้นด้วยข้อมูลไฟล์หรือโฟลเดอร์ไม่ใช่ชื่อไฟล์หรือโฟลเดอร์ ดังนั้นคุณควรใช้ดังนี้:
ls -Ad | grep '^\.'
หรือคุณสามารถทำได้ด้วยprintf
bash builtin:
printf "%s\n" .*
หากคุณใช้zsh
คุณสามารถใช้:
print -l .*
ต่อไปนี้เป็นสองวิธีในการค้นหาไฟล์ที่ซ่อนอยู่เท่านั้น
find . -maxdepth 1 -name ".*" -type f -ls
หรือ
find . -maxdepth 1 -name ".*" -type f -printf "%P \n"
ใช้-maxdepth
เพื่อระบุระยะเวลาที่คุณต้องการค้นหาในแผนผังไดเรกทอรี
การปรับปรุงคำตอบของ Flup :
ls -lad .[!.]* ..?*
นี้จะแสดงรายการไฟล์ทั้งหมดที่มีชื่อขึ้นต้นด้วยจุดและที่มีค่ามิได้.
..
โปรดทราบว่าหากคุณต้องการไพพ์เอาท์พุทของls
ถึงgrep
(ซึ่งตามที่ระบุโดย devnullจะไม่เป็นความคิดที่ดี) ให้แน่ใจว่าคุณใช้\ls
หรือcommand ls
เพราะถ้าls
เป็นนามแฝงเพื่อแสดงเอาต์พุตสี (เช่น Debian เป็นตัวอย่าง) เอาท์พุตประกอบด้วย ANSI escape sequences เพื่อสร้างเอาท์พุตสีซึ่งจะทำให้การค้นหาของคุณดีขึ้นgrep
หากรูปแบบของมันถูกยึดไว้ที่จุดเริ่มต้นของบรรทัด
-A
(แทนที่จะ-a
) เพื่อเพิกเฉย.
, ..
.
-A
แตกต่างจาก-a
สำหรับไดเรกทอรีที่ls
สืบทอดมา แต่ทั้งคู่จะถูกละเว้น (เท่ากัน) และไร้ประโยชน์สำหรับชื่อที่ระบุในบรรทัดคำสั่งที่มี-d
ผลบังคับใช้ นอกจากนี้หากใช้ls
นามแฝง--color=auto
แล้วการวางท่อก็โอเค เท่านั้น--color=always
หรือ--color
ทำให้เกิดปัญหา
วิธีการแก้ปัญหาของ val0x00ff นั้นดีมาก แต่ก็ลืมการซ่อนไดเรกทอรี
หากคุณต้องการไฟล์ที่ ซ่อนอยู่และ ไดเรกทอรีที่ซ่อนอยู่โดยไม่ต้อง และ .. :
find -maxdepth 1 -regex '\./\..+' -printf "%P\n"
find . \( -type f -o -type d \) -name '\.*' -print
; ใช้ในmaxdepth
กรณีที่จำเป็น
ด้านล่างมีขนาดกะทัดรัดและรองรับหลายรุ่น
1) แสดงไฟล์ที่ซ่อนอยู่ไดเรกทอรีและไดเรกทอรีย่อย
find . | grep "^\./\."
2) แสดงไดเรกทอรีที่ซ่อนอยู่และไดเรกทอรีย่อยเท่านั้น
find . -type d | grep "^\./\."
3) แสดงไฟล์ที่ซ่อนเฉพาะในปัจจุบันและไดเรกทอรีย่อย
find . -type f | grep "^\./\."
4) แสดงไฟล์และไดเรกทอรีที่ซ่อนอยู่ในโฟลเดอร์ปัจจุบัน
find . -maxdepth 1 | grep "^\./\."
คุณสามารถลอง:
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"
คุณสามารถลอง :
ls -a |grep -E "^\."
^ ระบุว่าเป็นจุดเริ่มต้นของเนื้อหาที่มี regexp
ls
ไม่ใช่ความคิดที่ยอดเยี่ยม แต่สิ่งที่คุณพยายามจะทำงานถ้าคุณใช้สมอ^
เพื่อแสดงจุดเริ่มต้นของการแข่งขันls -la | grep '^\.'