Linux - คำสั่งเพื่อแสดงรายการไฟล์ (ยกเว้น ls)


27

ลองนึกภาพคุณกำลังทำงานกับระบบและมีคนลบ lsคำสั่ง ( /bin/ls) โดยไม่ตั้งใจ คุณจะรับรายการไฟล์ในไดเรกทอรีปัจจุบันได้อย่างไร? ลองมัน.

ฉันลองวิธีการมากมายและค้นหาบนอินเทอร์เน็ต แต่ก็ไม่มีอะไร ฉันต้องการถามข้างlsคำสั่งว่าเราสามารถใช้คำสั่งอะไรเพื่อแสดงรายการไฟล์ทั้งหมด

คำตอบ:


35
echo *

... จะแสดงไฟล์ต่าง ๆ ในโฟลเดอร์ปัจจุบันผ่านทางไฟล์ต่างๆบนเชลล์ที่รองรับบอร์น

รายการนี้ไฟล์ทั้งหมดลงหนึ่งระดับ:

echo */*

ใน Bash หากตั้งค่า globstar (set ด้วยshopt -s globstar, unset ด้วยshopt -u globstar) สิ่งนี้จะแสดงรายการไฟล์ทั้งหมดซ้ำ:

echo **

10
นอกเหนือจากแบบฝึกหัดการบ้านแล้วecho *ยังมีประโยชน์ในทางปฏิบัติเมื่อคุณเมาระบบของคุณเพื่อที่คุณจะไม่สามารถรันโปรแกรมใด ๆ (เช่นคุณลบlibc.soหรือld.so) แต่คุณยังมีเชลล์ที่กำลังรันอยู่
Gilles 'หยุดความชั่วร้าย'

3
ใน bash4 (ฉันคิดว่า) และ zsh คุณสามารถใช้echo **/*ทำสิ่งนี้ซ้ำ ๆ ได้เช่นกัน
Reid

@ เรด: จะทดสอบดูสิ ยินดีที่ได้พบ
0xC0000022L

ดีมาก @Gilles เรียนรู้ว่าจากระบบ DEC เก่าซึ่งไม่สามารถเข้าถึง / usr หรือ / bin ในเงื่อนไขการบูตและสคริปต์การบูตที่จำเป็นเพื่อให้ 'cat' และ 'ls' ทำงานได้เอง
Arcege

1
ดีฉันแรกเรียนรู้เกี่ยวกับ echo * จากee.ryerson.ca/~elf/hack/recovery.html
Mark McKinstry

23
find -maxdepth 1 
find -maxdepth 1 -ls

น้อยกว่า TAB TAB

find -ls switch เป็นอิสระจาก / bin / ls และมีรูปแบบของตัวเองและแสดงข้อมูลรายละเอียด:

127432    0 drwxr-xr-x   2 stefan   stefan         48 Apr  8 22:51 ./temp/falsch/.hiddenfalsch
127447    0 lrwxrwxrwx   1 stefan   stefan          9 Apr  8 22:51 ./temp/falsch/linkfalsch -> subfalsch
127427    0 drwxr-xr-x   2 stefan   stefan         48 Apr  8 22:51 ./temp/.hiddenmusik

อีกรายละเอียดแสดงความเป็นไปได้คือ stat

stat *
  File: `halx0o'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 807h/2055d  Inode: 102701      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/  stefan)   Gid: ( 1000/  stefan)
Access: 2011-04-08 22:38:18.000000000 +0200
Modify: 2009-07-23 03:16:15.000000000 +0200
Change: 2011-04-09 23:29:13.000000000 +0200
  File: `ho ho ho'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 807h/2055d  Inode: 115835      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/  stefan)   Gid: ( 1000/  stefan)
Access: 2011-04-08 22:38:18.000000000 +0200
Modify: 2010-07-24 14:12:48.000000000 +0200
Change: 2011-04-09 23:29:13.000000000 +0200

10

เพื่อให้ดูเหมือนว่าlsฉันจะใช้forห่วงของ Bash :

for i in *; do echo $i; done

หากไม่ได้ผลฉันจะลอง Python ;):

python -c "import glob; print '\n'.join(glob.glob('/home/*'))"

import glob; print '\n'.join(glob.glob('/home/*'))ก็จะทำงานเช่นกัน
Arcege


6
find .

แม้ว่าคุณอาจต้องการป้อนพารามิเตอร์ที่ จำกัด ที่คุณต้องการ


3

lsattr ./*

getfacl ./* จะแสดงการอนุญาตด้วย

grep -l '.*' ./*

awk 'FNR==1 {print FILENAME}' ./* ทำงานร่วมกับ GNU awk

debugfs /dev/sdX แทนที่ sdX ด้วยพาร์ทิชันอะไรก็ตามที่คุณต้องการทำ ls on, จากนั้นคุณสามารถ ls ภายใน debugfs

debugfs:  cd /
debugfs:  ls -l
      2   40755 (2)      0      0    4096  6-Apr-2011 01:01 .
      2   40755 (2)      0      0    4096  6-Apr-2011 01:01 ..
     11   40700 (2)      0      0   16384  5-Jul-2010 09:59 lost+found
 2392065   40755 (2)      0      0    4096  5-Jul-2010 09:59 boot
 2228225   40755 (2)      0      0    4096  5-Jul-2010 09:59 sys
 1376257   40755 (2)      0      0    4096  5-Jul-2010 09:59 proc
 4915201   40755 (2)      0      0    4096  5-Jul-2010 09:59 dev
 3473409   40755 (2)      0      0   12288 10-Apr-2011 22:05 etc
  98305  100644 (1)      0      0       0  6-Jul-2010 12:05 .autofsck
 3342337   40755 (2)      0      0    4096  5-Apr-2011 15:05 var
 3932161   41777 (2)      0      0    4096 10-Apr-2011 22:11 tmp
  ..........
debugfs:  

lynx ./

mc สมมติว่าคุณติดตั้งผู้บัญชาการเที่ยงคืน


3

คล้ายกับechoรุ่น แต่จะพิมพ์หนึ่งรายการต่อบรรทัดเพื่อให้อ่านง่ายขึ้น:

printf %s\\n ./*

หรือ

printf '%s\n' ./*

เรียกซ้ำ (สำหรับ bash 4+; เชลล์อื่น ๆ ต้องการตัวเลือกอื่นในการตั้งค่าหรือเปิดใช้งาน globstar ตามค่าเริ่มต้น):

shopt -s globstar
printf %s\\n ./**/*

ไม่จำเป็นต้องใช้ปุ่ม '/ *' ระบบ**จะทำการย่อคืนลงในไดเรกทอรีทั้งหมดหากglobstarตั้งค่าไว้ printf '%s' **การเปลี่ยนแปลงเพียงเพื่อ



1

หากฉันมี bash shell เริ่มต้น (หรือเชลล์อื่นที่มีความสมบูรณ์) ฉันอาจจะพิมพ์ '*' จากนั้นแท็บ

หรืออย่างที่ฉันมักจะเริ่มต้น X ฉันอาจทำ 'nautilus' แต่ก็ใช้ได้สำหรับมนุษย์

ฉันอาจลอง / usr / bin / lsattr

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

sudo apt-get install --reinstall coreutils

1

ใน bash หรือ shell ที่มี tab เสร็จคล้ายกันคุณไม่จำเป็นต้องใช้คำสั่งจริงเลย: wibbleตามด้วยสอง tabs จะทำให้คุณเห็นรายการไฟล์ในไดเรกทอรีปัจจุบันและwibble /bin/ตามด้วย tab สองอันจะแสดงสิ่งที่คุณต้องการ ด้านซ้ายของ / bin ฉันเคยพบว่าตัวเองอยู่ในสถานการณ์นี้ (จริง ๆ แล้วฉันจะฆ่า / bin ทั้งหมดพร้อมกับสิ่งอื่น ๆ ) และเริ่มใช้echo *วิธีการที่ @STATUS_ACCESS_DENIED แนะนำ แต่ในที่สุดก็พบว่าการเติมแท็บนั้นสะดวกกว่า


0

อีกวิธีด้วยtreeไม่พูดถึงที่นี่มันจะวนซ้ำและไม่เหมือนกับ find หรือ ls ที่คุณไม่มีข้อผิดพลาด (เช่น: Permission denied, Not a directory) คุณยังได้พา ธ สัมบูรณ์ในกรณีที่คุณต้องการดึงไฟล์ไปยังxargsหรือคำสั่งอื่น

tree -fai /pathYouWantToList >listOfFiles.list

ความหมายตัวเลือก:

-a     All  files  are  printed.  By default tree does not print hidden files (those beginning with a dot
       `.').  In no event does tree print the file system constructs `.'  (current  directory)  and  `..'
       (previous directory).

-i     Makes tree not print the indentation lines, useful when used in conjunction with the -f option.

-f     Prints the full path prefix for each file.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.