ฉันต้องการแสดงเฉพาะไดเรกทอรีในพา ธ ที่ระบุ ( lsไม่มีตัวเลือกดังกล่าว) นอกจากนี้สิ่งนี้สามารถทำได้ด้วยคำสั่งบรรทัดเดียว?
ฉันต้องการแสดงเฉพาะไดเรกทอรีในพา ธ ที่ระบุ ( lsไม่มีตัวเลือกดังกล่าว) นอกจากนี้สิ่งนี้สามารถทำได้ด้วยคำสั่งบรรทัดเดียว?
คำตอบ:
ลองใช้วิธีนี้ls -d */เพื่อแสดงรายการไดเรกทอรีภายในไดเรกทอรีปัจจุบัน
ls -al | grep '^d'- นี้เป็นมากขึ้นรวบรัด
*/บังคับให้แสดงเฉพาะรายการที่ลงท้ายด้วยเครื่องหมายสแลชซึ่งในกรณีนี้จะเป็นไดเรกทอรีแม้ว่าจะไม่ได้ใช้-Fตัวเลือก lsคล้ายกับพฤติกรรมls *phpและวิธีการที่จะแสดงไฟล์ทั้งหมดที่ลงท้ายด้วยphpในไดเรกทอรี
echo */จะทำเช่นเดียวกัน
ลองสิ่งนี้:
find . -maxdepth 1 -type d
lsโซลูชันที่แนะนำfindมีความรับผิดชอบ แต่เพียงผู้เดียวในการทำงาน (ไม่ต้องอาศัยการขยายตัวของสัญลักษณ์แทนเชลล์ซึ่งสามารถกำหนดขีด จำกัด ได้) นอกจากนี้ยังมีความรัดกุมมากขึ้น
find * -maxdepth 0 -type dหรือถ้าคุณไม่ต้องการที่จะรวมถึงไดเรกทอรีของตัวเอง:
findมักจะไม่ แต่การส่งออกเพียงโฟลเดอร์ที่ระดับความลึก 1
ดังต่อไปนี้
find * -maxdepth 0 -type d
โดยทั่วไปกรองการขยายตัวของ '*' นั่นคือรายการทั้งหมดใน dir ปัจจุบันตาม-type dเงื่อนไข
ข้อดีคือเอาต์พุตจะเหมือนกันls -1 *แต่เฉพาะกับไดเรกทอรีและรายการเท่านั้นที่ไม่ได้ขึ้นต้นด้วยจุด
คุณสามารถใช้ls -d */หรือtree -d
โซลูชันอื่นจะเป็นแบบวงกลม แต่ขึ้นอยู่กับเชลล์ที่คุณใช้และหากสนับสนุนแบบวงกลมสำหรับไดเรกทอรี
ตัวอย่างเช่น ZSH:
zsh # ls *(/)
tree?
treeไม่มีการติดตั้งตามค่าเริ่มต้น (แม้ว่าจะอยู่ในที่เก็บ)
treeคำสั่งไม่ใช่คำสั่ง unix ดั้งเดิม (โปรดแก้ไขฉันหากฉันผิด)
เนื่องจากมีหลายวิธีที่จะทำนี่คืออีกวิธีหนึ่ง:
tree -d -L 1 -i --noreport
tree -d -L 1 -i --noreport | tail -n +2
tree -C -d -L 1 -i --noreport | tail -n+2
ls -l | grep '^d'
คุณสามารถสร้างนามแฝงและวางลงในไฟล์โปรไฟล์
alias ld="ls -l| grep '^d'"
find . -maxdepth 1 -type d -name [^\.]\* | sed 's:^\./::'
เพื่อแสดงรายการไดเรกทอรีในไดเรกทอรีการทำงานปัจจุบัน
ls -d */สามารถใช้งานได้ และหากคุณต้องการแสดงรายการไดเรกทอรีที่ซ่อนอยู่ให้ใช้คำสั่งนี้
ls -d .*/
ใช้สิ่งนี้เพื่อรับรายการไดเรกทอรี
ls -d */ | sed -e "s/\///g"
find specifiedpath -type d
หากคุณไม่ต้องการเรียกเก็บเงินคืนในไดเรกทอรีย่อยคุณสามารถทำได้แทน:
find specifiedpath -type d -mindepth 1 -maxdepth 1
โปรดทราบว่าไดเรกทอรี "จุด" (ชื่อขึ้นต้นด้วย.) จะถูกแสดงเช่นกัน แต่ไม่ไดเรกทอรีพิเศษมิได้. ..หากคุณไม่ต้องการไดเรกทอรี "จุด" คุณสามารถgrepออกได้:
find specifiedpath -type d -mindepth 1 -maxdepth 1 | grep -v '^\.'
mindepthเพื่อกำจัด.! 😁
คำตอบจะขึ้นอยู่กับเปลือกของคุณเปลือก
ในzshตัวอย่างเช่นคุณสามารถทำสิ่งต่อไปนี้:
echo *(/)
และไดเรกทอรีทั้งหมดภายในไดเรกทอรีการทำงานปัจจุบันจะปรากฏขึ้น
ดู man zshexpnข้อมูลเพิ่มเติม
ทางเลือกอื่นคือใช้find(1)ซึ่งควรทำงานกับ Unix รสมากที่สุด:
find . -maxdepth 1 -type d -print
find(1)man findมีประโยชน์หลายอย่างดังนั้นแน่นอนผมอยากแนะนำให้
คุณสามารถใช้treeคำสั่งพร้อมdสวิตช์เพื่อทำสิ่งนี้ให้สำเร็จ
% tree -d tstdir
tstdir
|-- d1
| `-- d11
| `-- d111
`-- d2
`-- d21
`-- d211
6 directories
ดูman treeข้อมูลเพิ่มเติม
treeขอบคุณฉันไม่เคยสังเกตเห็นแม้กระทั่งการพูดถึงของเขา โอ้ฉันไม่ได้ตั้งใจจะขโมยฟ้าร้องของใคร
ถ้าฉันมีไดเรกทอรีนี้:
ls -l
lrwxrwxrwx 1 nagios nagios 11 août 2 18:46 conf_nagios -> /etc/icinga
-rw------- 1 nagios nagios 724930 août 15 21:00 dead.letter
-rw-r--r-- 1 nagios nagios 12312 août 23 00:13 icinga.log
-rw-r--r-- 1 nagios nagios 8323 août 23 00:12 icinga.log.gz
drwxr-xr-x 2 nagios nagios 4096 août 23 16:36 tmp
ในการรับไดเร็กทอรีทั้งหมดให้ใช้ -L เพื่อแก้ไขลิงก์:
ls -lL | grep '^d'
drwxr-xr-x 5 nagios nagios 4096 août 15 21:22 conf_nagios
drwxr-xr-x 2 nagios nagios 4096 août 23 16:41 tmp
ไม่มี - L:
ls -l | grep '^d'
drwxr-xr-x 2 nagios nagios 4096 août 23 16:41 tmp
ไม่มีไดเร็กทอรีconf_nagios
### If you need full path of dir and list selective dir with "name" of dir(or dir_prefix*):
find $(pwd) -maxdepth 1 -type d -name "SL*"
สิ่งนี้ได้ผลสำหรับฉัน:
`ls -F | grep /`
(แต่ฉันเปลี่ยนecho */เป็นที่กล่าวถึงโดย @nos)
นี่เป็นอีกวิธีการหนึ่งที่แสดงไดเรกทอรีที่ลิงก์ ฉันชอบมันเล็กน้อยเพราะเป็นเซตย่อยของเอาต์พุต "ปกติ" ls -l:
ls -1d */ | rev | cut -c2- | rev | xargs ls -ld --color=always
ในทุบตี:
ls -d */
จะแสดงรายการไดเรกทอรีทั้งหมด
ls -ld */
จะแสดงรายการไดเรกทอรีทั้งหมดในรูปแบบยาว
ls -ld */ .*/
จะแสดงรายการไดเรกทอรีทั้งหมดรวมถึงไดเรกทอรีที่ซ่อนอยู่ในรูปแบบยาว
ฉันเพิ่งเปลี่ยนเป็น zsh (MacOS Catalina) และพบว่า:
ls -ld */ .*/
ไม่ทำงานอีกต่อไปหากไดเรกทอรีปัจจุบันไม่มีไดเรกทอรีที่ซ่อนอยู่
zsh: no matches found: .*/
มันจะพิมพ์ข้อผิดพลาดดังกล่าว แต่จะไม่สามารถพิมพ์ไดเรกทอรีใด ๆ
ls -ld *(/) .*(/)
ก็ล้มเหลวในลักษณะเดียวกัน
จนถึงตอนนี้ฉันได้พบว่าสิ่งนี้:
ls -ld */;ls -ld .*/
เป็นวิธีแก้ปัญหาที่ดี ;เป็นตัวคั่นคำสั่ง แต่หมายความว่าหากไม่มีไดเรกทอรีที่ซ่อนอยู่ก็จะแสดงรายการไดเรกทอรีและยังพิมพ์ข้อผิดพลาดสำหรับไม่มีไดเรกทอรีที่ซ่อนอยู่:
foo
bar
zsh: no matches found: .*/
lsเป็นคำสั่งของเชลล์สำหรับเนื้อหารายการไดเรกทอรีปัจจุบัน
-lเป็นธงที่จะระบุว่าคุณต้องการไปยังรายการใน Longford (หนึ่งรายการต่อบรรทัด + พวงของข้อมูลเย็นอื่น ๆ )
-dเป็นธงในรายการไดเรกทอรีทั้งหมด "เป็นไฟล์" และไม่ซ้ำ
*/คือ อาร์กิวเมนต์ 'รายการไฟล์ทั้งหมดที่ลงท้ายด้วยสแลช'
*เป็นคำสั่ง regex อย่างง่ายสำหรับ "อะไร" ดังนั้น*/ขอให้เชลล์แสดงรายการ "อะไรก็ตามที่ลงท้ายด้วย '/'"
ดูman lsข้อมูลเพิ่มเติม
ฉันใส่สิ่งนี้:
alias lad="ls -ld */;ls -ld .*/"
ใน. zshrc ของฉันและดูเหมือนว่าจะทำงานได้ดี
หมายเหตุ: ฉันได้ค้นพบสิ่งนั้นด้วย
ls -ld .*/ 2> /dev/null
ไม่ทำงานเนื่องจากยังคงพิมพ์ sterr ไปยังเทอร์มินัล ฉันจะอัปเดตคำตอบของฉันถ้า / เมื่อฉันหาวิธีแก้ปัญหา
du -d1อาจเป็นตัวเลือกที่สั้นที่สุด (ตราบใดที่คุณไม่จำเป็นต้องไพพ์อินพุตไปยังคำสั่งอื่น)
ในการแสดงรายการเฉพาะไดเรกทอรีในเส้นทางที่ระบุให้พิมพ์ ls -l | grep drw
drwและจะยกเว้นไดเรกทอรีที่ไม่สามารถอ่านและเขียนได้ grep ^dทำงานได้ดีขึ้น
รายการยาวของไดเรกทอรี
รายชื่อไดเรกทอรี
- ls -d * /