Вывести рекурсивно список имен и атрибутов файлов в директории
Обновлено: 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
Установить согласно заданию права на файлы и каталоги при помощи команды 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
По выданному преподавателем варианту определить функцию, вычисляемую программой, область представления и область допустимых значений исходных данных и результата, выполнить трассировку программы, предложить вариант с меньшим числом команд. При выполнении работы представлять результат и все операнды арифметических операций знаковыми числами, а логических операций набором из шестнадцати логических значений.
По выданному преподавателем варианту восстановить текст заданного варианта программы, определить предназначение и составить описание программы, определить область представления и область допустимых значений исходных данных и результата, выполнить трассировку программы.
По выданному преподавателем варианту восстановить текст заданного варианта программы и подпрограммы (программного комплекса), определить предназначение и составить его описание, определить область представления и область допустимых значений исходных данных и результата, выполнить трассировку программного комплекса.
По выданному преподавателем варианту разработать программу асинхронного обмена данными с внешним устройством. При помощи программы осуществить ввод или вывод информации, используя в качестве подтверждения данных сигнал (кнопку) готовности ВУ.
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 , вместо символьных имён:
Читайте также: