ls เนื้อหาของไดเรกทอรีที่ละเว้น symlinks


17

ฉันมีไดเรกทอรีที่ฉันต้องการแสดงรายการเนื้อหาทั้งหมด (ไฟล์และไดเรกทอรีย่อย) โดยไม่แสดงลิงก์สัญลักษณ์ ฉันใช้โปรแกรมอรรถประโยชน์ GNU บน Linux lsรุ่นคือ 8.13

ตัวอย่าง:

รายการไดเรกทอรีเต็ม:

~/test$ ls -Gg
total 12
drwxrwxr-x 2 4096 Jul  9 10:29 dir1
drwxrwxr-x 2 4096 Jul  9 10:29 dir2
drwxrwxr-x 2 4096 Jul  9 10:29 dir3
-rw-rw-r-- 1    0 Jul  9 10:29 file1
-rw-rw-r-- 1    0 Jul  9 10:29 file2
lrwxrwxrwx 1    5 Jul  9 10:29 link1 -> link1
lrwxrwxrwx 1    5 Jul  9 10:30 link2 -> link2

สิ่งที่ฉันอยากได้

~/test$ ls -somthing (or bash hack)
total 12
dir1 dir2 dir3 file1 file2

หมายเหตุ: แรงจูงใจหลักของฉันคือการทำ grep ซ้ำ (GNU grep 2.10) โดยไม่ต้องมี symlink

คำตอบ:


28

สำหรับคำถามที่ระบุไว้คุณสามารถใช้find:

find . -mindepth 1 ! -type l

จะแสดงรายการไฟล์และไดเรกทอรีทั้งหมดในไดเรกทอรีปัจจุบันหรือไดเรกทอรีย่อยใด ๆ ที่ไม่ใช่ symlinks

mindepth 1เป็นเพียงการข้าม.รายการไดเรกทอรีปัจจุบัน เนื้อของมันคือการรวมกันของ-type lซึ่งหมายความว่า "เป็นลิงค์สัญลักษณ์" และ!ซึ่งหมายถึงการปฏิเสธการทดสอบต่อไปนี้ เมื่อรวมกันแล้วจะจับคู่ทุกไฟล์ที่ไม่ใช่ symlink รายการนี้ไฟล์และไดเรกทอรีทั้งหมดซ้ำ แต่ไม่มี symlink

หากคุณต้องการไฟล์ปกติ (และไม่ใช่ไดเรกทอรี):

find . -type f

หากต้องการรวมเฉพาะชายด์โดยตรงของไดเร็กทอรีนี้และไม่ใช่คนอื่น ๆ ที่เรียกซ้ำทั้งหมด:

find . -mindepth 1 -maxdepth 1

คุณสามารถรวมการทดสอบ (และอื่น ๆ ) เข้าด้วยกันเพื่อรับรายการไฟล์ที่คุณต้องการ

ในการดำเนินการเฉพาะgrepกับทุกไฟล์ที่ตรงกับการทดสอบที่คุณใช้ให้ใช้-exec:

find . -type f -exec grep -H 'some pattern' '{}' +

'{}'จะถูกแทนที่ด้วยไฟล์ +เป็นสิ่งจำเป็นที่จะบอกfindคำสั่งของคุณจะทำ ตัวเลือก-Hบังคับให้ grep แสดงชื่อไฟล์แม้ว่าจะเกิดขึ้นกับไฟล์เดียว


ไม่แสดงไฟล์ในรูปแบบแม่มดที่พบ
TheMeaningfulEngineer

นั่นคือสิ่งที่คุณเรียกใช้grep(ดูย่อหน้าสุดท้าย)
Michael Homer

ฉันไม่ได้ทำงานให้ฉัน มันจะแสดงรูปแบบที่พบโดยไม่มีชื่อไฟล์ที่พบ
TheMeaningfulEngineer

2
ใช้grep -Hถ้าคุณมีมัน (ดูman grep) หรือgrep 'pat' '{}' /dev/null ';'เพื่อหลอกให้คิดว่ามีไฟล์หลายไฟล์ถ้าคุณไม่มี
Michael Homer

1
+ล้มเหลวในการตอบสนองความต้องการนั้นในกรณีที่ความเสื่อมที่มีเพียงหนึ่งไฟล์หรือหนึ่งไฟล์ที่เหลือในตอนท้าย
Michael Homer

17

หรือง่ายกว่า:

ls -l | grep -v ^l

คำอธิบาย

ls -lหมายถึงรายการในแบบยาว เมื่อคุณดำเนินการสตริงตัวแรกจะให้ข้อมูลเกี่ยวกับแต่ละไฟล์ อักขระตัวแรกระบุประเภทของไฟล์แต่ละไฟล์ หากเป็น symlink แสดงlว่าเป็นอักขระตัวแรก

grep -v ^lหมายถึงการกรอง ( -v) บรรทัดที่ขึ้นต้นด้วย ( ^) lและ


วิธีนี้ใช้งานได้ดี แต่จะได้รับเฉพาะชื่อโฟลเดอร์ได้อย่างไร ฉันต้องการใช้สิ่งนี้ในfor i in
Luka

คุณช่วยอธิบายรหัสนี้ได้มั้ย
abg

ระวังว่าวิธีนี้จะไม่ทำงานหากคุณ-lเข้าlsใช้ ดังนั้นสิ่งนี้จะไม่ทำงานตามที่คาดไว้:ls | grep -v ^l
stamster

@Luka คุณไม่วนซ้ำผลลัพธ์findดูunix.stackexchange.com/questions/321697
Kusalananda

1
@abg - ฉันได้เพิ่มคำอธิบาย หวังว่ามันจะช่วย
เจฟฟ์

7

ตั้งแต่เวอร์ชัน 2.12 เป็นต้นไป-rตัวเลือกสำหรับ grep GNU ไม่ได้อ้างอิงกับลิงก์สัญลักษณ์ยกเว้นคุณจะระบุด้วยตนเอง:

-r, - recursive

อ่านไฟล์ทั้งหมดภายใต้แต่ละไดเรกทอรีซ้ำ ๆ ตามลิงค์สัญลักษณ์เฉพาะเมื่อไฟล์เหล่านั้นอยู่ในบรรทัดคำสั่ง นี่เทียบเท่ากับตัวเลือกการเรียกคืน -d

-R, - การอ้างอิงซ้ำ

อ่านไฟล์ทั้งหมดภายใต้แต่ละไดเรกทอรีซ้ำ ติดตามลิงก์สัญลักษณ์ทั้งหมดซึ่งต่างจาก -r


grep รุ่นใดนั้น ฉันมี-R, -r, --recursive Read all files under each directory, recursively; this is equivalent to the -d recurse option.ใน 2.10
TheMeaningfulEngineer

grep (GNU grep) 2.14
tijagi

5

ใน zsh นี่จะเป็นเรื่องง่ายต้องขอบคุณตัวระบุglob :

grep -- PATTERN **/*(.)

รูปแบบ**/สำรวจเส้นทางไดเรกทอรีย่อยซ้ำ ตัวระบุแบบหมุน.จำกัด การจับคู่กับไฟล์ปกติ

หากไม่มี zsh ให้ใช้find(ดูคำตอบของ Michael Horner ) และในกรณีนี้ grep ของ GNU สามารถทำสิ่งที่คุณต้องการได้ (มันคือสิ่งที่grep -rทำ) - แต่ตั้งแต่รุ่น 2.12 เป็นต้นไปเวอร์ชันก่อนหน้านี้ตามลิงก์สัญลักษณ์


2

คุณสามารถใช้$LS_COLORSการทำเช่นนี้ หากรุ่นที่lsรองรับรองรับการระบุสีโดยใช้ตัวแปรนั้นคุณสามารถกำหนดเอาต์พุตต่อประเภทไฟล์ มันเป็นพฤติกรรมในตัวและสามารถกำหนดค่าได้มาก ดังนั้นฉันจึงสร้างไฟล์เพื่อสาธิตเช่นนี้:

for f in 9 8 7 6 5 4 3 2 1
    do touch "${f}file" && 
    ln -s ./"${f}file" ./"${f}filelink"
done

ดังนั้นตอนนี้ฉันจะทำ:

LS_COLORS='lc=:rc=:ec=:ln=\n\n\0HERE_THERE_BE_A_LINK>>\0:' \
ls -1 --color=always | cat

###OUTPUT###
1file


HERE_THERE_BE_A_LINK>>1filelink@
2file


HERE_THERE_BE_A_LINK>>2filelink@
3file

...
HERE_THERE_BE_A_LINK>>8filelink@
9file
...

และโมฆะก็อยู่ที่นั่นด้วย ...

LS_COLORS='lc=:rc=:ec=:ln=\n\n\0HERE_THERE_BE_A_LINK>>\0:' \
ls -1 --color=always | sed -n l
1file$
$
$
\000HERE_THERE_BE_A_LINK>>\0001filelink@$
2file$
$
$
\000HERE_THERE_BE_A_LINK>>\0002filelink@$
3file$
...

คุณสามารถระบุไฟล์ทั้งหมดหรือชนิดใดก็ได้ การทำเช่นนี้สำหรับชนิดไฟล์เดียวอาจไม่ได้รับตามที่คุณlsได้รวมไว้กับค่าการคอมไพล์เริ่มต้นสำหรับการหลบหนีเทอร์มินัล คุณควรทำอย่างไรดีกว่าที่จะกล่าวถึง api เป็นอินเทอร์เฟซเดียว นี่เป็นวิธีการแยกวิเคราะห์และการกำหนดdircolorsค่าเริ่มต้นที่กำหนดค่าสภาพแวดล้อมปัจจุบันเล็กน้อย:

LS_COLORS='rs=:no=//:lc=:rc=:ec=//:'$(
set -- di fi ln mh pi so do bd cd or su sg ca tw ow st ex
for fc do printf %s "$fc=/$fc//:"
done) ls -l --color=always | cat

เอาท์พุทมันในไดเรกทอรีบ้านของฉันมีลักษณะเช่นนี้:

total 884
///-rw-r--r-- 1 mikeserv mikeserv    793 Jul  9 11:23 /fi//1/
//drwxr-xr-x 1 mikeserv mikeserv    574 Jun 24 16:50 /di//Desktop//
//-rw-r--r-- 1 mikeserv mikeserv    166 Jul  4 23:02 /fi//Terminology.log/
//-rw-r--r-- 1 mikeserv mikeserv      0 Jul  6 11:24 /fi//new
file/
//lrwxrwxrwx 1 mikeserv mikeserv     10 Jul 11 04:18 /ln//new
file
link/ -> /fi//./new
file/
//-rwxr-xr-x 1 mikeserv mikeserv    190 Jun 22 11:26 /ex//script.sh/*
//-rw-r--r-- 1 mikeserv mikeserv 433568 Jun 22 17:10 /fi//shot-2014-06-22_17-10-16.jpg/
//-rw-r--r-- 1 mikeserv mikeserv     68 Jun 17 19:59 /fi//target.txt/

คุณสามารถเรียกใช้สิ่งนั้นด้วยcat -Aเช่นกันและความแตกต่างเพียงอย่างเดียวที่คุณจะพบคือคุณจะเห็น$บรรทัดใหม่ - ไม่มีตัวอักษรที่ไม่สามารถพิมพ์ออกมาได้ls --color=alwaysด้วยการกำหนดค่านี้ - เฉพาะสิ่งที่คุณเห็นที่นี่

ls แทรกเทอร์มินัลเริ่มต้นของการหลบหนีเช่นนี้:

${lc}${type_code}${rc}FILENAME${lc}${rs}${rc}

... โดยที่ค่าเริ่มต้นสำหรับ$lc (ซ้ายของรหัส) , $rc (ขวาของรหัส)และ$rs (รีเซ็ต)คือ:

 \033 - ESCAPE
 m - END ESCAPE
 0 - reset 

... ตามลำดับ ${type_code}จะใช้ในการยืนสำหรับต่างๆfi (ไฟล์ปกติ - unset เริ่มต้น) , di (ไดเรกทอรี) , ln (ลิงค์)และไฟล์ทุกชนิดอื่น ๆ ฉันรู้ นอกจากนี้ยังมี$no (ปกติ)ซึ่งเป็นค่าเริ่มต้นโดยไม่มีการตั้งค่าและที่นี่แสดงโดย//ที่จุดเริ่มต้นของแต่ละบรรทัด IFS=:บล็อกเล็ก ๆ ของฉันนั้นใช้การได้เพียงแค่ใส่ชื่อของแต่ละตัวที่สามารถกำหนดค่าได้ด้วยค่าของมันเองและเพิ่มเครื่องหมายทับหรือสอง - แม้ว่า\0NUL ไบต์จะทำเช่นกัน

โดยค่าเริ่มต้นlsจะแทรกหนึ่ง$rsก่อนหน้าเอาต์พุตแรกทันที$lcแต่นี่ไม่ได้แสดงที่นี่อย่างถูกต้อง ในกรณีนี้ฉันได้ระบุ$ec (รหัสสิ้นสุด)ซึ่งย่อมาจากใน$rsทุกกรณี - เมื่อมีการระบุว่าคุณไม่ได้รับการเพิ่มเติม$rsระหว่าง$noและ${type_code}ตามที่คุณต้องการ - มันจะแสดงเฉพาะชื่อไฟล์ทันทีและเมื่อเริ่มต้นของเอาต์พุต - อย่างที่คุณเห็นในเครื่องหมายทับหนึ่งอันที่หัวบรรทัดหนึ่ง

นี่เป็นตัวอย่างจากฉันเอง $LS_COLORS

printf %s "$LS_COLORS"

rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:\
so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:\
or=40;31;01:su=37;41:sg=30;43:ca=30;41:\
tw=30;42:ow=34;42:st=37;44:ex=01;32:\
*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:...

และในความเป็นจริงแฮ็คเปลือกตัวเล็กของฉันอาจมีความซับซ้อนมากเกินไป - มีอินเทอร์เฟซสำหรับการกำหนดค่าเหล่านี้อย่างกว้างขวาง ลองdircolors -pCli ของคุณและinfo dircolorsดูข้อมูลเพิ่มเติม

คุณสามารถใส่ชื่อไฟล์ในสตริงโดยพลการ คุณสามารถแสดงความคิดเห็นออกหากคุณต้องการ คุณสามารถระบุลักษณะการทำงานที่คล้ายกันโดยยึดตามนามสกุลไฟล์เท่านั้น มีไม่มากที่คุณไม่สามารถระบุได้

ตอนนี้ฉันไม่ได้ทำทั้งหมดนี้อย่างใดอย่างหนึ่ง - ฉันได้เรียนรู้เกี่ยวกับมันหลังจากสะดุดรหัสที่มาโดยไม่ได้ตั้งใจ

ด้วยการกำหนดค่าเฉพาะนี้lsจะปล่อย:

  1. $no - หนึ่งครั้งต่อการบันทึกที่จุดเริ่มต้นของแต่ละการบันทึก

  2. ${type_code}- หนึ่งครั้งก่อนหน้าชื่อไฟล์แต่ละชื่อทันทีเพื่อรวมตัวย่อของประเภทไฟล์และจะเกิดขึ้นในบรรทัดเดียวกับและ 7 ช่องว่างที่คั่นด้วยช่องว่างหลัง$no หรือทันทีหลังจากที่->แสดงถึงเป้าหมายของลิงก์สัญลักษณ์

  3. $ec - หนึ่งครั้งก่อนหน้าบรรทัดแรกและหลังจากนั้นตามชื่อไฟล์แต่ละครั้งทันที

  4. ค่าอื่น ๆ ทั้งหมดว่างเปล่า

สิ่งต่อไปนี้เป็นตัวคั่นที่ไม่มีค่าใช้lsจ่ายและในครั้งนี้ฉันจะใช้cat -Aแม้ว่าจะไม่มีมันก็จะดูเหมือนตัวอย่างสุดท้าย:

LS_COLORS='rs=:no=\0//:lc=:rc=:ec=\0//:'$(
set -- di fi ln mh pi so do bd cd or su sg ca tw ow st ex
for fc do printf %s "$fc=/$fc//\0:"
done) ls -l --color=always | cat -A

total 884$
^@//^@//-rw-r--r-- 1 mikeserv mikeserv    793 Jul  9 11:23 /fi//^@1^@//$
^@//drwxr-xr-x 1 mikeserv mikeserv    574 Jun 24 16:50 /di//^@Desktop^@///$
^@//-rw-r--r-- 1 mikeserv mikeserv    166 Jul  4 23:02 /fi//^@Terminology.log^@//$
^@//-rw-r--r-- 1 mikeserv mikeserv      0 Jul  6 11:24 /fi//^@new$
file^@//$
^@//lrwxrwxrwx 1 mikeserv mikeserv     10 Jul 11 04:18 /ln//^@new$
file$
link^@// -> /fi//^@./new$
file^@//$
^@//-rwxr-xr-x 1 mikeserv mikeserv    190 Jun 22 11:26 /ex//^@script.sh^@//*$
^@//-rw-r--r-- 1 mikeserv mikeserv 433568 Jun 22 17:10 /fi//^@shot-2014-06-22_17-10-16.jpg^@//$
^@//-rw-r--r-- 1 mikeserv mikeserv     68 Jun 17 19:59 /fi//^@target.txt^@//$

ดังนั้นในการลบลิงก์สัญลักษณ์ทั้งหมดออกจาก-lรายชื่อ ong อย่างน่าเชื่อถือคุณอาจทำการเปลี่ยนแปลงง่าย ๆ :

LS_COLORS='rs=:no=//:lc=:rc=:ec=/ :'$(
set -- di fi mh pi so do bd cd or su sg ca tw ow st ex
for fc do printf %s "$fc=$fc/:"
done)ln=///: ls -l --color=always | sed ':ln
\|///|{N;\|\n//|!bln};s|.*//||'

ผลลัพธ์ของฉันหลังจากใช้งานดูเหมือนว่า ...

total 884
-rw-r--r-- 1 mikeserv mikeserv    793 Jul  9 11:23 fi/1/ 
drwxr-xr-x 1 mikeserv mikeserv    574 Jun 24 16:50 di/Desktop/ /
-rw-r--r-- 1 mikeserv mikeserv    166 Jul  4 23:02 fi/Terminology.log/ 
-rw-r--r-- 1 mikeserv mikeserv      0 Jul  6 11:24 fi/new
file/ 
-rwxr-xr-x 1 mikeserv mikeserv    190 Jun 22 11:26 ex/script.sh/ *
-rw-r--r-- 1 mikeserv mikeserv 433568 Jun 22 17:10 fi/shot-2014-06-22_17-10-16.jpg/ 
-rw-r--r-- 1 mikeserv mikeserv     68 Jun 17 19:59 fi/target.txt/ 

ใช้คำสั่งบางอย่างที่ฉันทำด้านบน:

LSCOLORS=...$(...)fc1=///:fc2=///: ls ... | sed ...

... (โดยที่fc1และfc2เป็นประเภทไฟล์ที่ปรากฏหลังจากset --อยู่ใน subshell)ควรทำหน้าที่ลบชุดไฟล์ประเภทที่คุณต้องการจากlsเอาท์พุทได้อย่างน่าเชื่อถือโดยไม่คำนึงถึงอักขระใด ๆ ที่ชื่อไฟล์อาจมี


เฮ้ดี +1 สำหรับความคิดริเริ่ม ดูเหมือนว่าจะทำให้หายใจไม่ออกในไดเรกทอรี แต่พวกเขากำลังพิมพ์ด้วยรหัสสี ANSI ที่อ่านไม่ออก อย่างไรก็ตามคุณสามารถเพิ่มคำอธิบายเกี่ยวกับวิธีการทำงานของมันได้หรือไม่? บางทีอาจจะอธิบายสิ่งที่lc, ncฯลฯ มีอะไรบ้าง
terdon

@terdon - พวกเขากำลังพิมพ์เฉพาะกับ ANSI หนีตั้งอยู่ในสภาพแวดล้อมของคุณและหรือรวบรวมเป็นค่าเริ่มต้นสำหรับls's di=คุ้มค่า คุณจะต้องเพิ่มdi=:ใน var เพื่อลบล้างสิ่งนั้น - และสำหรับคนอื่น ๆ ทั้งหมด นี่คือสิ่งที่ฉันหมายถึงโดย api - คุณพูดถึงแต่ละประเภทไฟล์ แต่คุณต้องพูดถึงส่วนต่อประสานที่เหมือนกันในทุกกรณี ดังนั้นการตั้งค่าlnวิธีหนึ่งและการละเว้นdiค่าเริ่มต้นจะไม่ได้ผล มีค่าเริ่มต้นที่คอมไพล์แล้วเช่นกัน ... อืม สิ่งที่คุณถามเกี่ยวกับlcและncและสิ่งต่างๆนั้นถูกต้องสมบูรณ์ - ฉันทำไปแล้วเมื่อวันก่อน ฉันจะเชื่อมโยงมันฉันคิดว่า
mikeserv

ดังนั้นฉันต้องระบุทั้งประเภทไฟล์ที่เป็นไปได้เสมอหรือตรวจสอบว่ามีอะไรอยู่ก่อนมือ? โอเคขอบคุณ.
terdon

@terdon - ดูการแก้ไขของฉันในตอนนี้ - มันทำทุกอย่างในเชลล์สองบรรทัดโดยระบุแต่ละชนิดตามชื่อประเภทและลบชื่อไฟล์ทุกชื่อได้อย่างน่าเชื่อถือ ไม่มีการแนะนำให้พิมพ์ และมีการ API สำหรับการอยู่แล้วว่า - dircolorsมัน มันอ่านไฟล์กำหนดค่าและส่งออกevalค่า var friendly shell มันค่อนข้างง่าย - แต่มีเพียงไม่กี่บรรทัดเท่านั้น อย่างไรก็ตามถ้าคุณต้องการที่จะใช้dircolorsคุณเพียงแค่บันทึกสองไฟล์ที่แตกต่างกันและเรียกมันอย่างนั้น นอกจากนี้ฉันแสดงให้คุณเห็นอีกวันหนึ่งว่าจะทำทั้งสองอย่างพร้อมกันด้วย\0ตัวคั่น NUL ซึ่งเป็นส่วนหนึ่งของลำดับการหลบหนีแต่ละครั้ง
mikeserv

@terdon - ฉันพยายามทำให้ชัดเจนว่ามันง่ายเพียงใดในการตั้งค่าทั้งหมดที่อาจถูกรวบรวมไว้ - ฉันคิดว่าฉันได้รับทั้งหมดอาจจะมากเกินไป ... LS_COLORS='rs=:no=\0//:lc=:rc=:ec=\0//:'$( set -- di fi ln mh pi so do bd cd or su sg ca tw ow st ex; for fc do printf %s "$fc=/$fc//\0:"; done) ls -l --color=always | cat -A
mikeserv

0

คำตอบข้างต้นนำไปสู่การต่อไปนี้:

 ls -1F | grep -i "/"

คำสั่ง ls 1 ที่ออกจากคำสั่ง ls ยังคงให้รายการอยู่


1
ทำไมgrep -i? มันไม่เหมือนกับว่า/เป็นตัวใหญ่หรือตัวเล็ก lsใช้ค่าเริ่มต้นเป็นรูปแบบ noe-column เมื่อเอาต์พุตไม่ใช่เทอร์มินัล (เป็นไพพ์ที่นี่)
Kusalananda

-2

ลองอันนี้:

ls | grep -v " -> "

2
a -> bที่จะล้มเหลวด้วยเหตุผลต่างๆเช่นในไฟล์ที่เรียกว่า มันจะล้มเหลวในชื่อไฟล์ที่มีบรรทัดใหม่และความแปลกอื่น โปรดอ่านสิ่งนี้เพราะเหตุใดการแยกวิเคราะห์ ls จึงเป็นความคิดที่ไม่ดี
terdon

@terdon มีเหตุผลพื้นฐานเพิ่มเติมว่าทำไมสิ่งนี้ถึงล้มเหลว อย่างใดอย่างหนึ่งlsคือนามแฝงไปls -lและสิ่งนี้จะส่งกลับคอลัมน์ก่อนชื่อไฟล์หรือไม่และสิ่งนี้ไม่ได้ทำอะไรเป็นพิเศษเกี่ยวกับการเชื่อมโยงสัญลักษณ์
Gilles 'SO- หยุดความชั่วร้าย'

@terdon - lsแยกวิเคราะห์ตัวเอง เราทุกแยกlsทุกครั้งที่เราพิมพ์ไปยังขั้ว - มีการAPI ฉันโพสต์คำตอบที่แสดงถึงสิ่งที่ชอบที่นี่ - แต่คุณสามารถทำอะไรได้มากกว่านี้ ฉันแสดงให้คุณเห็นเมื่อวันก่อน - คุณมีชื่อไฟล์ที่คั่นด้วยตัวคุณเอง
mikeserv

@mikeserv ฉันรู้ฉันรู้ อย่างไรก็ตามการอธิบายวิธีการทำอย่างปลอดภัยนั้นใช้เวลาหลายร้อยบรรทัดในขณะที่คุณแสดงตัว คำตอบนี้ทนทุกข์ทรมานจากการแยกวิเคราะห์ ls และ OP ไม่ได้ตระหนักถึงพวกเขาอย่างชัดเจน
terdon

@terdon - lsจะไม่กินลูกของคุณหรืออะไรเลย - เป็นเพียงโปรแกรม หากคุณไม่อธิบายมันก็จะใช้เวลาหลายร้อยคนในการอธิบายและอีกหลายร้อยเพื่ออธิบายว่าทำไมหลายร้อยบรรทัดที่คุณเพิ่งลิงก์ไปผิด และนอกจากนี้ - นี่เป็นเพียงสองบรรทัด:LS_COLORS='lc=:rc=:ec=:ln=\n\n\0HERE_THERE_BE_A_LINK>>\0:' \ ls -1 --color=always | cat
mikeserv

-3

ลองคำสั่งนี้: ls -p | grep -v @


ไม่แสดงรายการลิงก์
TheMeaningfulEngineer

@Alan: k ลองสิ่งนี้find -type f
Thushi

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