Как получить список всех папок и файлов в Linux?

· Блог · 14 мин чтения

В Unix OS (Linux) получить список файлов и папок можно несколькими способами. Я распишу лишь один из них — самый распространенный, а также некоторые метод помощники, который помогут вам в работе в файлами.

Внимание! «$» будет обозначать начало консольной команды, вводить в консоль его не нужно.

Самый распространенный способ — это использовать ls:

$ ls

В ответ вы должны получить что-то подобное на это:

$ ls
idea-IC-171.4424.56  PhpStorm-171.4694.2

В одну строчку список всех файлов в директории, где вы находитесь. Не удобно, не правда ли? Давайте сделаем вывод столбцом.

Вывод файлов и папок столбцом

$ ls -al

Где -a обозначает показывать все файлы, даже . и ... . — означает текущая директория, .. на одну директорию назад, а -l означает использование длинного синтаксиса вывода списка файлов и папок.

Чтобы не писать параметры в формате как «ls -a -l» вы можете группировать их (писать друг за другом), как показано на примере выше.

Пример вывод команды выше будет следующий:

$ ls -al
total 16
drwxr-xr-x  4 ateshaev ateshaev 4096 Jun  1 14:52 .
drwxr-xr-x 42 ateshaev ateshaev 4096 Jun 30 08:56 ..
drwxr-xr-x  8 ateshaev ateshaev 4096 Jun  1 14:45 idea-IC-171.4424.56
drwxr-xr-x  8 ateshaev ateshaev 4096 Jun  1 14:52 PhpStorm-171.4694.2

В данном случае, ничего интересного, потому что выводятся две папки и ls не показывает для них размер файла и некоторые другие данные. Ниже будет представлен пример с файлами.

Сортировать папки и файлы по размеру

Сортировать можно по:

- ‘none’ 
- ‘time’
- ‘size’
- ‘extension’
- ‘version’

Расшифровка:

  • По пустому значению, что в принципе логично
  • По времени
  • По размеру
  • По расширению, например показать только php файлы
  • Или по версии файла

Пример сортировки по размеру файлов и папок:

$ ls -a -l -S --sort=size

В этой случае логичнее распределить параметры с помощью тире(«-«), потому что написанное становится читабельнее.

В ответ вы должны получить что-то на подобии этого:

$ ls -a -l -S --sort=size
total 256
-rwxr-xr-x  1 ateshaev ateshaev 123916 Jul  2 11:48 composer.lock
-rwxrwxrwx  1 ateshaev ateshaev   8853 Feb  1 18:00 init
-rwxrwxrwx  1 ateshaev ateshaev   5051 Jun  9 15:07 requirements.php
drwxrwxr-x 13 ateshaev ateshaev   4096 Jul  2 15:25 .
drwxr-xr-x  6 root     root       4096 Jun 23 15:29 ..
drwxrwxrwx 13 ateshaev ateshaev   4096 Jun 22 17:51 backend
drwxrwxr-x 10 ateshaev ateshaev   4096 Jun 21 10:41 common
drwxrwxr-x  7 ateshaev ateshaev   4096 Jun  5 14:56 console
drwxrwxr-x  4 ateshaev ateshaev   4096 Jun  9 15:07 environments
drwxrwxr-x 11 ateshaev ateshaev   4096 Jun 22 17:51 frontend

Как видно, в четвертой колонке, такие числа как 123916 (третья строка) — обозначают размер файла и не очень читаются. Давайте сделаем читабельный вид, добавив -h параметр, который означает «человеческий вид размера файла».

В итоге у вас должно получиться что-то похожее на это:

$ ls -a -l -h -S --sort=size
total 256K
-rwxr-xr-x  1 ateshaev ateshaev 122K Jul  2 11:48 composer.lock
-rwxrwxrwx  1 ateshaev ateshaev 8,7K Feb  1 18:00 init
-rwxrwxrwx  1 ateshaev ateshaev 5,0K Jun  9 15:07 requirements.php
...

Сразу стало намного лучше :)

Быстрый способ написано ls

Мне часто было лень писать:

$ ls -al

И в дальнейшем я нашел альтернативный способ:

$ ll

В формате «ll» вы также можете прописывать -h, -S —sort=size и т.д. — это лишь укороченный формат

Еще много чего можно сделать с помощью ls

Все что можно сделать с помощью этой команды, я не смогу вместить в этот пост, думаю, что это самое основное, что может вам понадобиться.

Остальные команды вы можете посмотреть командой ls --help.

Вот список всех доступных команд:

Да-да, они на английском, поэтому учите английский или переводите определенную команду и пробуйте сами как это работает, потому что без практики мало что получиться.

-a, --all                  do not ignore entries starting with .
-A, --almost-all           do not list implied . and ..
    --author               with -l, print the author of each file
-b, --escape               print C-style escapes for nongraphic characters
    --block-size=SIZE      scale sizes by SIZE before printing them.  E.g.,
                             '--block-size=M' prints sizes in units of
                             1,048,576 bytes.  See SIZE format below.
-B, --ignore-backups       do not list implied entries ending with ~
-c                         with -lt: sort by, and show, ctime (time of last
                             modification of file status information)
                             with -l: show ctime and sort by name
                             otherwise: sort by ctime, newest first
-C                         list entries by columns
    --color[=WHEN]         colorize the output.  WHEN defaults to 'always'
                             or can be 'never' or 'auto'.  More info below
-d, --directory            list directory entries instead of contents,
                             and do not dereference symbolic links
-D, --dired                generate output designed for Emacs' dired mode
-f                         do not sort, enable -aU, disable -ls --color
-F, --classify             append indicator (one of */=>@|) to entries
    --file-type            likewise, except do not append '*'
    --format=WORD          across -x, commas -m, horizontal -x, long -l,
                             single-column -1, verbose -l, vertical -C
    --full-time            like -l --time-style=full-iso
-g                         like -l, but do not list owner
    --group-directories-first
                           group directories before files.
                             augment with a --sort option, but any
                             use of --sort=none (-U) disables grouping
-G, --no-group             in a long listing, don't print group names
-h, --human-readable       with -l, print sizes in human readable format
                             (e.g., 1K 234M 2G)
    --si                   likewise, but use powers of 1000 not 1024
-H, --dereference-command-line
                           follow symbolic links listed on the command line
    --dereference-command-line-symlink-to-dir
                           follow each command line symbolic link
                           that points to a directory
    --hide=PATTERN         do not list implied entries matching shell PATTERN
                             (overridden by -a or -A)
    --indicator-style=WORD  append indicator with style WORD to entry names:
                             none (default), slash (-p),
                             file-type (--file-type), classify (-F)
-i, --inode                print the index number of each file
-I, --ignore=PATTERN       do not list implied entries matching shell PATTERN
-k, --kibibytes            use 1024-byte blocks
-l                         use a long listing format
-L, --dereference          when showing file information for a symbolic
                             link, show information for the file the link
                             references rather than for the link itself
-m                         fill width with a comma separated list of entries
-n, --numeric-uid-gid      like -l, but list numeric user and group IDs
-N, --literal              print raw entry names (don't treat e.g. control
                             characters specially)
-o                         like -l, but do not list group information
-p, --indicator-style=slash
                           append / indicator to directories
-q, --hide-control-chars   print ? instead of non graphic characters
    --show-control-chars   show non graphic characters as-is (default
                           unless program is 'ls' and output is a terminal)
-Q, --quote-name           enclose entry names in double quotes
    --quoting-style=WORD   use quoting style WORD for entry names:
                             literal, locale, shell, shell-always, c, escape
-r, --reverse              reverse order while sorting
-R, --recursive            list subdirectories recursively
-s, --size                 print the allocated size of each file, in blocks
-S                         sort by file size
    --sort=WORD            sort by WORD instead of name: none -U,
                           extension -X, size -S, time -t, version -v
    --time=WORD            with -l, show time as WORD instead of modification
                           time: atime -u, access -u, use -u, ctime -c,
                           or status -c; use specified time as sort key
                           if --sort=time
    --time-style=STYLE     with -l, show times using style STYLE:
                           full-iso, long-iso, iso, locale, +FORMAT.
                           FORMAT is interpreted like 'date'; if FORMAT is
                           FORMAT1<newline>FORMAT2, FORMAT1 applies to
                           non-recent files and FORMAT2 to recent files;
                           if STYLE is prefixed with 'posix-', STYLE
                           takes effect only outside the POSIX locale
-t                         sort by modification time, newest first
-T, --tabsize=COLS         assume tab stops at each COLS instead of 8
-u                         with -lt: sort by, and show, access time
                             with -l: show access time and sort by name
                             otherwise: sort by access time
-U                         do not sort; list entries in directory order
-v                         natural sort of (version) numbers within text
-w, --width=COLS           assume screen width instead of current value
-x                         list entries by lines instead of by columns
-X                         sort alphabetically by entry extension
-Z, --context              print any SELinux security context of each file
-1                         list one file per line
    --help     display this help and exit
    --version  output version information and exit

Для того, чтобы вы полностью вникли во все команды, нужно некоторые моменты объяснить вам.

Когда, например, вы видите следующий формат:

-S                         sort by file size
    --sort=WORD            sort by WORD instead of name: none -U,
                           extension -X, size -S, time -t, version -v
    --time=WORD            with -l, show time as WORD instead of modification
                           time: atime -u, access -u, use -u, ctime -c,
                           or status -c; use specified time as sort key

Это означает, что сначала нужно указать -S, а за ним --sort или --time, то есть в итоге у вас получится -S --sort или -S --time.