Блок задач

5. Проекты

Темы
Сложность 6

Проект «Программа ls»

Реализовать простой аналог классической системной программы UNIX — ls. Программа печатает на экран файлы и каталоги, переданные ей в аргументах командной строки.

Обычный вывод ls:

~% ls
0.jpg        docs                keys_71.dat           post.txt
1.jpg        downloads           keys_78.dat           public_html
:2eDS_Store  Dropbox             keys_82.dat           qBT_dir
2.jpg        dwhelper            keys90.dat            q.png
3.jpg        ext                 keys.dat              science.xcf
aa.pdf       hs_err_pid7610.log  lj_re                 STORE
a.out        keys11.dat          Mail                  suster1.txt
backups      keys_18.dat         mbox                  Temporary Items
bin          keys48.dat          mnt                   test.c
bmkeys.zip   keys65.dat          mp3                   tmp
cxoffice     keys_69.dat         Music                 untitled.ui
Desktop      keys70.dat          Network Trash Folder  work

Вывод с детальной информацией:

~% ls -l
итого 1109
-rw-r--r--  1 root root   35690 Апр 21 11:54 0.jpg
-rw-r--r--  1 root root   36117 Апр 21 11:55 1.jpg
-rw-r--r--  1 od   users  15364 Апр 20 14:08 :2eDS_Store
-rw-r--r--  1 root root   30333 Апр 21 11:55 2.jpg
-rw-r--r--  1 root root   30247 Апр 21 11:55 3.jpg
-rw-r--r--  1 od   users 568794 Май  2  2009 aa.pdf
-rwxr-xr-x  1 od   users   6631 Мар  5 10:24 a.out
drwxr-xr-x  3 od   users     72 Янв  4 16:11 backups
drwxr-xr-x  2 od   users    608 Мар 19 15:44 bin
-rw-r--r--  1 od   users   6943 Окт 22  2009 bmkeys.zip
drwxr-xr-x  8 od   users    320 Окт 29  2008 cxoffice
drwxr-xr-x  4 od   users    176 Апр  3 16:02 Desktop
drwxr-xr-x  8 od   users   2040 Апр  4 19:21 docs
drwxr-xr-x 22 od   users  11512 Апр 26 09:24 downloads
drwxr-xr-x  9 od   users    360 Мар  4 23:27 Dropbox
drwxr-xr-x  2 od   users     96 Апр 17 18:58 dwhelper
drwxr-xr-x  3 od   users     72 Апр 27  2009 ext
-rw-r--r--  1 od   users  95265 Мар 29 15:37 hs_err_pid7610.log
-rw-r--r--  1 od   users    855 Ноя 16 16:58 keys11.dat
-rw-r--r--  1 od   users    857 Окт  8  2009 keys_18.dat
-rw-r--r--  1 od   users    859 Окт  8  2009 keys48.dat
-rw-r--r--  1 od   users    863 Ноя 16 17:02 keys65.dat
-rw-r--r--  1 od   users    863 Ноя 16 17:02 keys_69.dat
-rw-r--r--  1 od   users    857 Окт 22  2009 keys70.dat
-rw-r--r--  1 od   users    855 Ноя 16 16:58 keys_71.dat
-rw-r--r--  1 od   users    859 Окт  8  2009 keys_78.dat
-rw-r--r--  1 od   users    857 Окт 22  2009 keys_82.dat
-rw-r--r--  1 od   users    857 Окт  8  2009 keys90.dat
-rw-r--r--  1 od   users    737 Окт  7  2009 keys.dat
-rw-r--r--  1 od   users   1507 Июл 11  2009 lj_re
drwx------  2 od   users     48 Дек  9 23:56 Mail
-rw-------  1 od   mail    3452 Дек  9 23:53 mbox
drwxr-xr-x  8 od   users    192 Май  1  2009 mnt
drwxr-xr-x 36 od   users   2112 Ноя 24  2008 mp3
drwxr-xr-x 25 od   users    832 Фев 21 11:11 Music
drwxr-xr-x  3 od   users     80 Фев 10 22:29 Network Trash Folder
-rw-r--r--  1 od   users   5725 Ноя 28 01:33 post.txt
drwxr-xr-x  3 od   users     72 Апр 17  2009 public_html
drwxr-xr-x  5 od   users    144 Янв 10 00:39 qBT_dir
-rw-r--r--  1 od   users  24163 Окт 11  2009 q.png
-rw-r--r--  1 od   users 156114 Янв 29 11:30 science.xcf
drwxr-xr-x  9 od   users    296 Апр 17 20:46 STORE
-rw-r--r--  1 od   users  12925 Янв 28 02:10 suster1.txt
drwxr-xr-x  3 od   users     80 Фев 10 22:29 Temporary Items
-rw-r--r--  1 od   users    136 Мар  5 10:24 test.c
drwxr-xr-x 43 od   users   2392 Апр 24 19:11 tmp
-rw-r--r--  1 od   users   6279 Мар  8 03:28 untitled.ui
drwxr-xr-x 78 od   users   2168 Апр 19 10:27 work

Вызов ls с аргументами:

~% ls -l test.c qBT_dir 
-rw-r--r-- 1 od users 136 Мар  5 10:24 test.c

qBT_dir:
итого 0
drwxr-xr-x 3 od users  72 Янв  1 16:32 downloads
drwxr-xr-x 9 od users 288 Июл 31  2009 Mikrotik
drwxr-xr-x 3 od users 384 Июл 31  2009 routeros-x86-3.25

Примечания:

  • По умолчанию файлы сортируются по имени в возрастающем порядке. Ключ -r сортирует в обратном порядке. Ключи -X, -S, -t выбирают свойство для сортировки: расширение, размер, время создания соответственно.
  • Некоторые другие ключи, которые можно реализовать:

    • -R — рекурсивный вывод всех подкаталогов.
    • -1 — вывод в одну колонку.
    • -x — вывод не по колонкам, а по строкам (не вниз и вправо, а вправо и вниз).
    • -h — показ размеров файлов не в байтах, а в более понятной человеку форме: 1K, 234M, 2G.