Вывести рекурсивно список имен и атрибутов файлов в директории

Обновлено: 07.07.2024

Чтобы просмотреть содержимое подкаталога `work' в текущем каталоге, введите:

Чтобы просмотреть содержимое каталога `/usr/doc', введите:

$ ls /usr/doc [Enter]

Из листинга по умолчанию Вы не сможете отличить каталоги и исполняемые файлы от обычных. Используйте ключ `-F', который заставит ls поместить символ `/' после имен подкаталогов и символ `*' после имен исполняемых файлов:

В этом примере текущий рабочий каталог содержит исполняемый файл `repeat', каталог `words', и несколько файлов других типов `test1' и `test2'.

Еще один способ просмотра содержимого каталогов - использование ``менеджера файлов'' , которых для Linux создано достаточно много; наиболее популярным является ``Midnight Commander'' или mc.

Чтобы вывести более подробный листинг каталога, используйте ls с ключом `-l' (``long''). Листинг будет содержать размер каждого файла в байтах, время последней модификации, тип файла, имя владельца и права доступа.

Для вывода подробной информации о каталоге `/usr/doc/bash', введите: Первая строка содержит информацию о полном объеме занимаемого каталогом дискового пространства в блоках по 1024 байта (в данном случае 72). Каждая последующая строка содержит несколько колонок с информацией о каждом файле.

Первая колонка указывает тип файла и права доступа к нему. Первый символ в этой колонке определяет тип файла; тире (`-') означает обычный файл (по умолчанию). Каталоги обозначаются буквой `d', а символические ссылки - буквой `l'. Остальные девять символов в первой колонке указывают права доступа к файлу. Вторая колонка указывает количество жестких ссылов на файл. Третья и четвертая колонки указывают пользователя и группу, которые владеют этим файлом. Пятая колонка содержит размер файла в байтах, шестая - время и дату последней модификации файла, а в последней колонке указано имя файла, к которому относится информация.

Чтобы просмотреть каталог рекурсивно, то есть со всеми содержащимися в нем подкаталогами, используйте опцию `-R'. Например, для текущего каталога введите: В данном примере текущий рабочий каталог содержит два подкаталога, `work' и `play', но не содержит файлов. Каждый из подкаталогов содержит файл `notes'.

Чтобы вывести полное оглавление все файловой системы, наберите:

Обычно этот ключ комбинируют с опцией `-l', чтобы вывести наиболее полный листинг файлов системы:

Примечание: Некоторые каталоги могут не попасть в листинг, если у Вас нет права доступа к ним.

Чтобы отсортировать список файлов в каталоге по времени создания или модификации, используйте опцию `-t'. Например, чтобы вывести список файлов в каталоге `/usr/tmp', чтобы самые новые файлы были вверху списка, введите:

$ ls -t /usr/tmp [Enter]

По умолчанию, ls не выводит имена файлов, начинающиеся с символа ``точка'' (`.'). Чтобы уменьшить листинг, многие приложения ``скрывают'' файлы конфигурации в Вашем домашнем каталоге, присваивая им имена, начинающиеся с точки; они называются dot-файлы, или ``скрытые'' . Каждый каталог имеет два специальных dot-файла: `..' - родительский каталог и `.' - сам этот каталог.

Чтобы увидеть все файлы в каталоге, включая скрытые, используйте опцию `-a'. Например, для текущего каталога:

Чтобы увидеть все файлы, исключая специальные `..' и `.', используйте опцию `'-A:

Чтобы увидеть цветной листинг каталога, используйте ls с ключом `--color' ; тогда все имена файлов будут выведены разными цветами, в зависимости от их содержания. По умолчанию каталоги выводятся синим, текстовые файлы - белым, исполняемые - зеленым и т.д.

Примечание: Обычно для команды `ls -color' создается псевдоним `ls', так что листинг выводится в цвете по умолчанию.

Для того, чтобы вывести граф иерархии каталогов, используйте утилиту tree. Например, для вывода дерева каталогов, начиная с текущего, наберите:

В этом примере выводится дерево каталогов, в котором текущий каталог содержит два подкаталога `projects' и `trip'; а каталог `projects', в свою очередь, содержит подкаталоги `current' и `old'.

Чтобы вывести дерево каталогов для определенного каталога, укажите его имя в качестве аргумента tree. Например, для Вашего домашнего каталога, введите:

Чтобы вывести дерево каталогов, в котором будут присутствовать только имена каталогов, используйте опцию `-d'. Это полезно при выводе полного дерева каталогов системы:

$ tree -d / > tree [Enter]

Команда ls имеет много опций для управления листингом и отображаемой информацией о файлах; приведенная таблица описывает некоторые из них.

Опция Описание
--color Вывод имен файлов в цвете, в зависимости от их типа.
-R Рекурсивный список файлов.
-a Вывод всех файлов, включая скрытые.
-d Вывод только имен каталогов, без промсмотра их содержимого.
-f Вывод содержимого каталога в том порядке, в котором оно записано на диск.
-l Подробный листинг.
-r Сортировка содержимого каталога в обратном порядке.
-s Вывод размера - в блоках по 1K - для каждого файла.
-t Сортировка по времени создания или модификации файла.

Примечание: Вы можете комбинировать опции в любом порядке; например, чтобы вывести список файлов, отсортированный по времени, со всеми атрибутами, введите `-lt'. Чтобы рекурсивно отобразить все скрытые файлы и их атрибуты, используйте `-lRa'. Порядок опций не имеет значения, так что `-lRa' означает то же самое, что и `-alR'.


Next: Копирование файлов и каталогов Up: Работа с файлами Previous: Перемещение по каталогам Contents Index Alex Otwagin 2002-12-16

task1

Установить согласно заданию права на файлы и каталоги при помощи команды chmod , используя различные способы указания прав.

  • exploud2: права 666
  • glameow6: владелец должен читать, записывать директорию и переходить в нее; группа-владелец должна читать и записывать директорию; остальные пользователи должны читать директорию
  • skiploom: права 751
  • pidove: владелец должен читать и записывать файл; группа-владелец должна записывать файл; остальные пользователи должны не иметь никаких прав
  • staraptor: владелец должен записывать директорию и переходить в нее; группа-владелец должна читать и записывать директорию; остальные пользователи должны записывать директорию и переходить в нее
  • watchog: права 066
  • shelgon: права 700
  • weedle: -wx-wxr-x
  • gorebyss5: права 315
  • nidoking: права 751
  • mismagius: права 751
  • kadabra: rwxr-x-w-
  • milotic5: ---rw--w-
  • pidgeot7: rw-r-----
  • scizor0: владелец должен читать, записывать директорию и переходить в нее; группа-владелец должна читать директорию и переходить в нее; остальные пользователи должны записывать директорию и переходить в нее
  • politoed: rw----r--
  • croconaw: владелец должен читать файл; группа-владелец должна не иметь никаких прав; остальные пользователи должны не иметь никаких прав
  • crustle: ---r--rw-

Скопировать часть дерева и создать ссылки внутри дерева согласно заданию при помощи команд cp и ln , а также комманды cat и перенаправления ввода-вывода.

  • cоздать жесткую ссылку для файла exploud2 с именем lab0/glameow6/watchogexploud
  • создать символическую ссылку c именем Copy_97 на директорию gorebyss5 в каталоге lab0
  • cоздать символическую ссылку для файла pidgeot7 с именем lab0/scizor0/croconawpidgeot
  • скопировать содержимое файла exploud2 в новый файл lab0/scizor0/croconawexploud
  • скопировать рекурсивно директорию gorebyss5 в директорию lab0/glameow6/weedle
  • объеденить содержимое файлов lab0/scizor0/croconaw, lab0/scizor0/croconaw, в новый файл lab0/milotic5_42
  • скопировать файл milotic5 в директорию lab0/gorebyss5/mismagius

Используя команды cat, wc, ls, head, tail, echo, sort, grep выполнить в соответствии с вариантом задания поиск и фильтрацию файлов, каталогов и содержащихся в них данных.

Выполнить удаление файлов и каталогов при помощи команд rm и rmdir согласно варианту задания.

  • Удалить файл pidgeot7
  • Удалить файл lab0/scizor0/crustle
  • удалить символические ссылки lab0/scizor0/croconawpidge*
  • удалить жесткие ссылки lab0/glameow6/watchogexplo*
  • Удалить директорию scizor0
  • Удалить директорию lab0/gorebyss5/mismagius

По выданному преподавателем варианту определить функцию, вычисляемую программой, область представления и область допустимых значений исходных данных и результата, выполнить трассировку программы, предложить вариант с меньшим числом команд. При выполнении работы представлять результат и все операнды арифметических операций знаковыми числами, а логических операций набором из шестнадцати логических значений.

task2

По выданному преподавателем варианту восстановить текст заданного варианта программы, определить предназначение и составить описание программы, определить область представления и область допустимых значений исходных данных и результата, выполнить трассировку программы.

task3

По выданному преподавателем варианту восстановить текст заданного варианта программы и подпрограммы (программного комплекса), определить предназначение и составить его описание, определить область представления и область допустимых значений исходных данных и результата, выполнить трассировку программного комплекса.

task4

По выданному преподавателем варианту разработать программу асинхронного обмена данными с внешним устройством. При помощи программы осуществить ввод или вывод информации, используя в качестве подтверждения данных сигнал (кнопку) готовности ВУ.

About

Лабораторные работы по основам профессиональной деятельности (основам вычислительной техники) (ИТМО, ПИиКТ-СиППО, 1 курс).

Я пытаюсь просмотреть все файлы в каталоге, и если есть каталог, просмотрите все его файлы и так далее, пока не будет больше каталогов, чтобы перейти. Каждый обработанный элемент будет добавлен в массив результатов в функции ниже. Он не работает, хотя я не уверен, что я могу сделать/что я сделал неправильно, но браузер работает безумно медленно, когда этот код ниже обрабатывается, любая помощь приветствуется, спасибо!

получить все файлы и папки в каталоге, не вызывайте функцию, когда у вас есть . или .. .

выход (пример) :

это принесет вам все файлы с путями.

это более короткая версия:

получить все файлы фильтр (2-й аргумент) и папки в каталоге, не вызвать функцию, когда у вас есть . или .. .

выход (пример) :

предложение Джеймса Кэмерона.

мое предложение без уродливых структур управления "foreach" - это

вы можете только извлечь путь к файлу, который вы можете сделать так:

все еще 4 строки кода, но более прямолинейно, чем использование цикла или что-то еще.

вот модифицированная версия ответа Hors, работает немного лучше для моего случая, поскольку он удаляет базовый каталог, который передается по мере его прохождения, и имеет рекурсивный переключатель, который может быть установлен в false, что также удобно. Кроме того, чтобы сделать вывод более читаемым, я разделил файлы файлов и подкаталогов, поэтому файлы добавляются сначала, а затем файлы подкаталогов (см. Результат Для того, что я имею в виду.)

я попробовал несколько других методов и предложений, и это то, что я закончил с. У меня уже был другой метод работы, который был очень похож, но, казалось, терпел неудачу, когда был подкаталог без файлов, но этот подкаталог имел подкаталог С files, он не сканировал подкаталог для файлов - поэтому некоторые ответы, возможно, потребуется проверить для этого случая.). в любом случае, я думал, что опубликую свою версию здесь, Если кто-то смотрит.

Я полагаю, что нужно быть осторожным, чтобы не передать значение $basedir этой функции, когда называя его. в основном просто передайте $dir (или передача пути к файлу тоже будет работать) и, возможно, $recursive как false, если и по мере необходимости. Результат:

наслаждайтесь! Ладно, вернемся к программе, в которой я это использую.

Это решение сделало работу для меня. RecursiveIteratorIterator перечисляет все каталоги и файлы рекурсивно, но несортированные. Программа фильтрует список и сортирует его.

Я уверен, что есть способ, чтобы написать это Короче, не стесняйтесь, чтобы улучшить его. Это просто фрагмент кода. Возможно, вы захотите использовать его в своих целях.

вот что я придумал и это не много строк кода

Он выводит что-то вроде

** точки являются точками unoordered список.

надеюсь, что это помогает.

это напечатает полный путь ко всем файлам в данном каталоге, вы также можете передать другие функции обратного вызова recursiveDir.

Далее будут приведены примеры опций и примеры их использования.

-R Рекурсивно обойти встретившиеся подкаталоги.
-a Вывести список всех файлов (без этой опции не выводятся скрытые файлы, имена которых начинаются с точки).
-d Если аргумент является каталогом, то выводить только его имя, а не содержимое. Часто используется с флагом -l для получения сведений о состоянии каталога.
-C Вывод в несколько колонок с сортировкой по колонкам.
-x Вывод в несколько колонок с сортировкой по строкам.
-m Вывод в свободном формате, имена файлов разделяются запятыми.
-l Вывод в длинном формате: перед именами файлов выдается режим доступа, количество ссылок на файл, имена владельца и группы, размер в байтах и время последней модификации (см. ниже). Если файл является специальным, то в поле размера выводится старший и младший номера устройства.
-n То же, что и -l, но идентификаторы владельца и группы выводятся в виде чисел, а не в виде имен.
-o То же, что и -l, но идентификатор группы не выводится.
-g То же, что и -l, но идентификатор владельца не выводится.
-r Изменить порядок сортировки на обратный алфавитный или, при наличии флага -t, сначала выводить более старые файлы.
-t Имена файлов сортируются не по алфавиту, а по времени (сначала идут самые свежие файлы). По умолчанию используется время последнего изменения. См. также флаги -u и -c.
-u Вместо времени последнего изменения использовать время последнего доступа для сортировки (с флагом -t) или для вывода (с флагом -l).
-c Вместо времени последнего изменения использовать время последней модификации описателя файла (т.е. время создания файла, изменения режима доступа к нему и т.п.) для сортировки (с флагом -t) или для вывода (с флагом -l).
-p Если файл является каталогом, то выдавать после его имени символ /.
-F Если файл является каталогом, то выдавать после его имени символ /; если файл является выполняемым, то выдавать после его имени символ *.
-b Выдавать непечатные символы, входящие в имя файла, в восьмеричном виде (ddd).
-q Выдавать непечатные символы, входящие в имя файла, в виде символа ?.
-i Выдавать в первой колонке номера описателей файлов.
-s Выдавать размер файлов в блоках (включая косвенные блоки).
-f Рассматривать каждый аргумент как каталог и выводить его содержимое. Этот флаг отменяет флаги -l, -t, -s, -r и включает флаг -a. Сортировка имен файлов не производится; имена выдаются в таком порядке, в каком они перечислены в каталоге.

Теперь несколько примеров наиболее полезных опций.

Вывести список только каталогов:

Ключ -l весьма полезен, так как позволяет проверять владельца и права на файлы/каталоги:

Для вывода информации о скрытых файлах (начинаются с точки) используйте ключ -a :

Про ошибку с .gvfs можно почитать в статье ls: cannot access .gvfs: Permission denied.

Кратко остановимся на обозначениях прав доступа и обозначениях файлов/каталогов. Первый символ:

Открыть для редактирования последний редактировавшийся файл:

Отсортировать файлы/каталоги по их размеру, начиная с самого большого:

То же самое, но сортировать по дате последнего доступа к файлу, а не дате его модификации, используйте ключ -u :

Вывести список файлов/каталогов, разделённый на 5 колонок, разделённых на всю ширину окна:

Выводить список через запятую:

Вывести список рекурсивно, включая подкаталоги и их содержимое:

./Desktop:
PDF-Viewer.desktop
PDF-Viewer.lnk

Остортировать файлы/каталоги в обратном алфавитном порядке:

Вывести информацию о номерах inode файлов и каталогов:

Вывести информацию о пользователе/группе в виде UID и GID , вместо символьных имён:

Читайте также: