แสดงเฉพาะไฟล์ที่ซ่อนอยู่ (ไฟล์ dot) ในนามแฝง ls


42

ฉันกำลังใช้คำสั่ง

ls -a | grep '^\.'

เพื่อแสดงเฉพาะไฟล์ที่ซ่อนอยู่ ฉันเพิ่มบรรทัด

alias hidden='ls -a | grep '^\.'' # show only hidden files

ไปยัง.bash_aliasesไฟล์

แต่มันไม่ได้ผล มันอาจเป็นปัญหากับ'ตัวละคร

คุณกรุณาช่วยฉันเขียนนามแฝงที่ถูกต้องได้ไหม


ด้วยตัวอย่างที่มีความซับซ้อนมากขึ้นคุณแทบจะไม่ต้องเปลี่ยนจากคำพูดเดียว - สองคำ สิ่งนี้สามารถทำได้โดยเพียง แต่ใส่เครื่องหมายคำพูดขึ้นต่อกัน สำหรับตัวอย่างนี้มันจะ'ls -a | grep '"'"'^\.'"'"'ดูแย่มาก (และสำหรับตัวอย่างนี้มันไม่จำเป็นอย่างสมบูรณ์เพราะคุณสามารถสลับคู่อัญประกาศสำหรับคู่ใดก็ได้) แต่ในโอกาสที่หายากมากมันจะมีประโยชน์ คุณอาจต้องการ-Cแฟล็ก (บังคับเอาต์พุตหลายคอลัมน์) ดูภาพนี้imgur.com/a/VIVFP
Dylan

คำตอบ:


26

ทำให้คู่ของอัญประกาศคู่อัญประกาศ:

alias hidden='ls -a | grep "^\."'

หรือทำเครื่องหมายอัญประกาศคู่ด้านนอก:

alias hidden="ls -a | grep '^\.'"

หรือทำเครื่องหมายอัญประกาศคู่ทั้งหมดและหลีกเลี่ยงคู่ด้านใน:

alias hidden="ls -a | grep \"^\.\""

หรือทำให้เป็นฟังก์ชันดังนั้นคุณสามารถส่งผ่านข้อโต้แย้งบางอย่างเมื่อโทร:

hidden() { ls -a "$@" | grep '^\.'; }

90

ให้เชลล์แสดงรายการไฟล์ dot และบอกlsไม่ให้เห็นผ่านไดเรกทอรี:

ls -d .*

6
นี่เป็นข้อได้เปรียบของการอนุญาตให้มีรายชื่อหลายคอลัมน์ซึ่งแตกต่างจากgrepวิธีการแบบพื้นฐาน
anol

อย่างไรก็ตามยังแสดงไดเรกทอรี (ดังที่กล่าวไว้) วิธีใดที่จะทำให้มันง่ายอย่างที่เป็นอยู่และแสดงเฉพาะไฟล์
honzajde

@honzajde คำถามไม่ได้ขอให้ยกเว้นไดเรกทอรี หากคุณต้องการยกเว้นไดเรกทอรีคุณสามารถใช้ls -d .* | grep -v '^d'หรือ (zsh เท่านั้น)print -lr .*(.)
Gilles 'ดังนั้นหยุดชั่วร้าย'

สิ่งนี้ใช้ไม่ได้กับฉันบน Ubuntu 16.04
Andrew_1510

9
ls -Ad .* #This will list all the hidden files & directories while retaining the color & formatting

หรือ

วิธีสร้างนามแฝงที่เหมือนกัน:

alias lh='ls -Ad .*'

หรือ

สิ่งเดียวกันสามารถทำได้ผ่านคำสั่ง grep และผู้ประกอบการท่อ; อย่างไรก็ตามมันจะหลวมสีและการจัดรูปแบบ:

ls -a|grep "^\." 

หรือ

ผ่านนามแฝง:

alias lh='ls -a|grep "^\."'

4

คุณสามารถใช้เครื่องหมายคำพูดคู่:

alias hidden="ls -a | grep '^\.'"

หรือเชื่อมโยงสตริงที่ยกมาเดี่ยวมากขึ้น

alias hidden='ls -a | grep '\''^\.'\'

หรือลบเครื่องหมายคำพูดภายในทั้งหมด

alias hidden='ls -a | grep ^\\.'

2

สำหรับบันทึกนี้ดูเหมือนจะไม่ทำงานกับฉันเนื่องจากls -aพิมพ์สอง (บางครั้งคอลัมน์เพิ่มเติม) ฉันขอแนะนำให้ใช้-1ตัวเลือกเพื่อให้แน่ใจว่าทุกไฟล์อยู่ในบรรทัดของตัวเอง บางสิ่งเช่นนี้

alias hidden='ls -a1 | grep "^\."'

ฉันเพิ่งลองls -a | catมันยังคงส่งออกใน 2 คอลัมน์ ฉันควรจะพูดถึงว่าฉันใช้ Solaris ไม่ใช่ GNU บางทีนั่นอาจเป็นเหตุผล ในทุกกรณี-1โซลูชันของคุณทำงานได้อย่างสมบูรณ์และสวยงามกว่าวิธีแก้ปัญหาแฮ็คของฉัน ฉันกำลังปรับปรุงคำตอบของฉัน
rahmu

ฉันอาจพลาดการสนทนานี้ แต่ดูที่นี่ว่ามีบางอย่างผิดปกติ
xralf

1

ทำให้มันมากขึ้นเล็กน้อยซับซ้อน แต่หลีกเลี่ยงการแยกls

llsh () { find "${@:-.}/" -maxdepth 1 -type f -name ".*" -ls; }

lsh () { find "${@:-.}/" -maxdepth 1 -type f -name ".*" -print; }

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

llshฟังก์ชั่นจะสร้าง "รายชื่อยาว" ซึ่งจะมีเพียงเล็กน้อยอย่างละเอียดกว่าls -lในขณะที่สร้างคอลัมน์เดียวรายการเช่นlshls -1


0
find . -type f -name ".*"

หรือ

find . -type f -name ".*" | while read file; do basename $file; done

Hi! คุณสามารถปรับปรุงคำตอบของคุณโดยอธิบายรายละเอียดว่ามันทำงานอย่างไรและโดยการพูดถึงว่าทำไมในความเห็นของคุณถึงได้ตอบคำถาม
dhag

0
# add it to ~/.bashrc

    hidden() {  # lists hidden files and directories
        find . -maxdepth 1 -name '.?*' -exec ls --color -d {} \;
        }

    hiddenfiles() { # lists hidden files
        find . -maxdepth 1 -type f -name '.?*' -exec ls --color -d {} \;
        }

    hiddendirs() { # lists directories
        find . -maxdepth 1 -type d -name '.?*' -exec ls --color -d {} \;
        }

-1

lsการสนับสนุนของคุณหรือไม่? จากman ls:

    -a, --all
          do not ignore entries starting with .

   -A, --almost-all
          do not list implied . and ..

$ ls --version
ls (GNU coreutils) 8.5
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  
Written by Richard M. Stallman and David MacKenzie.

ใช่มันทำได้ แต่ฉันต้องการonlyไฟล์ที่ซ่อนอยู่
xralf

ls -A -1 -d -F .* | egrep -v '/$'
waltinator

-3

เพียงพิมพ์คำสั่งด้านล่างและอย่าสับสนกับสิ่งที่อธิบายไว้ข้างต้น

ls -A -1 -d -F .* | egrep -v '/$'

ฉันคิดว่า OP ขอวิธีเขียนชื่อแทนให้ถูกต้อง
ตอบโต้

1
นั่นเป็นเพียงความคิดเห็นของวอลติเนเตอร์ในคำตอบของเขา / เธอ เพื่อให้คำตอบนี้มีประโยชน์คุณต้องอธิบายว่าlsธงเหล่านั้นและegrepคำสั่งนั้นตอบคำถามอย่างไรและทำไม
Anthony G - ความยุติธรรมสำหรับโมนิกา

-3
ls -lart | sed -n "/ \.[A-Za-z0-9][A-Za-z0-9]*/p"

2
คุณช่วยกรุณาชี้แจงคำตอบของคุณหนึ่งบรรทัดของรหัสจะไม่นับเป็นคำตอบที่ดี
โรมิโอ Ninov

ตามความต้องการเขาต้องการแสดงรายการเฉพาะไฟล์ที่ซ่อนอยู่ ดังนั้นฉันจึงมีรายการไฟล์ทั้งหมดรวมถึงไฟล์ที่ซ่อนโดย ls -lart จากนั้นฉันใช้ regex เพื่อแสดงไฟล์ที่เริ่มต้นด้วย dot (.) ฉันได้แซงหน้าแบบนี้
Shailesh Chanderiya

[g906016 @ hklu2574881: [PTA] ~] $ ls -lart | sed -n "/ \. [A-Za-z0-9] [A-Za-z0-9] * / p" -rw-r - r-- 1 g906016 g906016 658 29 ธันวาคม 2016. zshrc -rw- r - r-- 1 g906016 g906016 171 ธันวาคม 29 2016 .kshrc -rw ------- 1 g906016 g906016 27 ธันวาคม 29 2016 .k5login -rw-r - r-- 1 g906016 g906016 176 ธันวาคม 29 2016 bash_profile -rw-R - r-- 1 g906016 g906016 18 29 ธันวาคม 2016 .bash_logout -rwxr-xr-x 1 g906016 g906016 0 29 ธันวาคม 2016 .dir_colors drwxr-x --- 3 g906016 g906016 4096 29 ธันวาคม 2016 .subversion
shailesh Chanderiya
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.