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.
Arcege

1
хорошо, я впервые узнал об эхо * от ee.ryerson.ca/~elf/hack/recovery.html
Марк МакКинстри

23
find -maxdepth 1 
find -maxdepth 1 -ls

Меньше TAB TAB

Параметр find -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цикл 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, тогда вы можете использовать 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

Ну, если бы я не мог использовать ls в режиме оболочки emacs, я мог бы переключиться в режим eshell или просто в dired.


1

Если у меня запущена оболочка bash (или любая другая оболочка с завершением), я бы просто набрал '*', а затем tab.

Или, как я обычно начинал X, я также могу просто сделать «nautilus», но хорошо, что это для людей.

Я также могу попробовать / usr / bin / lsattr

Но в реальном мире то, что я действительно сделал бы, если бы такая вещь произошла со мной, было бы:

sudo apt-get install --reinstall coreutils

1

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


0

С другой стороны tree, здесь нигде не упоминается, она идет рекурсивно и, в отличие от find, или если у вас нет ошибок (например,:) 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.