Linux - команда для переліку файлів (крім ls)


27

Уявіть, що ви працювали над системою, і хтось випадково видалив lsкоманду ( /bin/ls). Як ви могли отримати список файлів у поточному каталозі? Спробуй це.

Я спробував багато методів, а також шукав в Інтернеті, але нічого. Я хочу запитати поряд з lsкомандою, яку команду ми можемо використовувати, щоб перелічити всі файли.

Відповіді:


35
echo *

... покаже файли у поточній папці через глобулювання файлів на оболонках, сумісних з Bourne.

Тут перераховані всі файли вниз на один рівень:

echo */*

У Bash, якщо встановлено globstar (встановлено з shopt -s globstar, не встановлено з shopt -u globstar), у цьому списку всі файли будуть рекурсивно:

echo **

10
Крім домашнього завдання, echo *корисно на практиці, коли ви накрутили свою систему, щоб ви не могли виконати жодну програму (наприклад, ви видалили libc.soабо ld.so), але у вас все ще є запущена оболонка.
Жил "ТАК - перестань бути злим"

3
У bash4 (я думаю) і zsh, ви можете використовувати це echo **/*для того, щоб зробити це рекурсивно.
Рейд

@Reid: перевірю це. Приємна знахідка.
0xC0000022L

Гарний, @Gilles. Дізналися, що зі старих систем DEC, які не могли мати доступ до / usr або / bin в певних умовах завантаження та сценарії завантаження, необхідні для того, щоб зробити функції 'cat' та 'ls' самостійно.
Арседж

1
приємно, я вперше дізнався про ехо * від ee.ryerson.ca/~elf/hack/recovery.html
Марк

23
find -maxdepth 1 
find -maxdepth 1 -ls

менше TAB TAB

перемикач знаходження -ls не залежить від / 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цикл Баша :

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/*'))працювало б так само добре.
Арседж


6
find .

Хоча ви, мабуть, хочете ввести будь-які обмежуючі параметри, які вам потрібні.


3

lsattr ./*

getfacl ./* відображатиметься і дозволи

grep -l '.*' ./*

awk 'FNR==1 {print FILENAME}' ./* працює з GNU awk

debugfs /dev/sdX замініть sdX на будь-який розділ, на якому ви хочете зробити ls, тоді ви можете встановити всередині налагодження

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+; для інших оболонок потрібна інша опція, щоб встановити його, або глобальна версія включена за замовчуванням):

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

Немає необхідності в '/ *', просто **, якщо globstarвона встановлена, буде повторюватися у всіх каталогах . Просто змініть на printf '%s' **.


1

Добре, якщо я не зміг би використати ls в режимі оболонки emacs, я можу перейти на режим eshell або просто перезаписаний.


1

Якщо у мене запущена команда bash shell (або будь-яка інша оболонка з завершенням), я, ймовірно, просто введіть '*', а потім вкладку.

Або, як зазвичай у мене починається X, я також можу просто робити "nautilus". Але добре це для людей.

Я також можу спробувати / usr / bin / lsattr

Але в реальному світі я б насправді робив, якби таке сталося зі мною:

sudo apt-get install --reinstall coreutils

1

У bash або оболонці з подібним завершенням вкладки вам взагалі не потрібно використовувати реальну команду: wibbleпісля цього дві вкладки отримають список файлів у поточному каталозі, а wibble /bin/за ними дві вкладки покажуть, що саме зліва / бін. Одного разу я опинився в цій ситуації (насправді я вбив / скорив цілком разом з деякими іншими речами) і почав використовувати запропонований echo *підхід @STATUS_ACCESS_DENIED, але врешті-решт знайшов заповнення вкладки більш зручним.


0

Іншим спосіб з tree, ніде не згадується тут, це йде рекурсивно і в відміну від знахідки або 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.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.