Linux вывести список файлов рекурсивно

Linux вывести список файлов рекурсивно

Чтобы просмотреть содержимое подкаталога `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:

Читайте также:  Мониторинг сервера windows server 2012

Чтобы увидеть цветной листинг каталога, используйте 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

Источник

#!/bin/sh

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

Рекурсивные операции с файлами в Linux

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

Эпиграф

— Это новый «Гарри Поттер». Я заказал версии для детей и взрослых, чтобы проверить, что в тексте нет различий.
Морис Мосс, The IT Crowd.

chmod

Ключ -r у chmod интерпретируется как «запретить всем чтение файла», а 755 в данном случае рассматривается как название файла, у которого изменяются права. Поскольку в подавляющем большинстве случаев файла с таким названием в текущей директории отсутствует, то команда возвращает ошибку.

chown, chattr, chgrp

У вышеперечисленных команд опция -r просто отсутствует. Для рекурсивной обработки директорий необходимо использовать опцию -R. Очевидно, так сделано из солидарности с «братской» командой chmod

Несмотря на то, что в странице документации cp из GNU coreutils сказано, что опции -r и -R равнозначны и означают рекурсивную обработку встречающихся директорий, опция -r, в отличие от -R, не соответствует стандарту POSIX и ее указание может повлечь за собой неожиданные последствия в случае, если очередной копируемый объект является чем-то отличным от обычного файла или директории (например, символической ссылкой, fifo или сокетом). В таких случаях некоторые реализации cp просто копируют содержимое ссылки/fifo, тогда как при -R такие объекты пересоздаются заново. Раньше такое поведение было присуще GNU cp, о чем до сих пор имеется свидетельство в русском man cp. Что касается более правильных (чем Linux) систем, то, например, в BSD-версии cp опция -r работает в «режиме совместимости», т.е. не создает символическую ссылку заново, а копирует содержимое в файл с тем же именем.

Читайте также:  После обновления windows 10 не работают принтеры

Ключ -r команды ls означает «обратный порядок сортировки»
Правильно:

rm, grep

Зато в следующих случаях употребление -r/-R равнозначно:

Что касается grep, то, во-первых, обе опции не соответствуют POSIX (но, похоже, присутствуют во всех реализациях) Во-вторых, иногда возникает путаница между опциями -i (игнорировать регистр) и -I (пропускать двоичные файлы). Но это уже тема для другого разговора 🙂

Прочие команды

Поскольку команд, в том или ином виде поддерживающих рекурсивную обработку каталогов, набралось довольно много, то я попробовал свести их в одну таблицу.

команда -r -R
chacl рекурсия удаление ACL только с файлов
setfacl не поддерживается рекурсия
cvs номер ревизии рекурсия
diff рекурсия не поддерживается
gzip/gunzip рекурсия не поддерживается
zip рекурсия рекурсия, начиная с текущей директории (см. man zip, там есть существенная разница в обработке -r и -R)
rsync рекурсия использование относительных путей
wget рекурсия указывает список отвергаемых шаблонов

Заключение

Как видно, в большинстве случаев для указания рекурсии используется опция -r в нижнем регистре, в противовес стандартным утилитам, для которых характерно все же -R. Поэтому совет один: в случае сомнения смотрите в man, там все написано 🙂

Постскриптум

По абзацу про cp видно, что русская документация в некоторых дистрибутивах (не будем показывать пальцем на Debian и Ubuntu) не соответствует реальному положению дел. В частности, несмотря на то, что в jaunty используется GNU coreutis 6.10, русский man описывает cp версии 4.1. Желающие могут самостоятельно сравнить свою версию man 1 cp с локализованной. Другими словами, русская страница документации cp в силу своей древности вводит пользователя в заблуждение, т.е. врёт. По этой причине я рекомендую сделать apt-get remove manpages-ru.

2 комментария

    Comment by anon :

> По этой причине я рекомендую сделать apt-get remove manpages-ru

Плюсую. Помню как потерял с час времени, из за феерично переведенного мана:

If from is not NULL, and the underlying protocol provides the source address, this source address is filled in.

Если параметр from не равен NULL, а сокет не является ориентированным на соединения, то адресотправителя в сообщении не заполняется.

scp неплохо было бы упомянуть. Нигде проблем с -r/-R не испытывал, только в scp почему-то постоянно пишу -R.

Источник

Команда Ls в Linux (Список Файлов и Каталогов)

Ls Command in Linux (List Files and Directories)

В этом руководстве мы покажем вам, как использовать ls команду, на практических примерах и подробных объяснениях наиболее распространенных ls вариантов.

Команда ls является одной из основных команд, которую должен знать любой пользователь Linux. Он используется для отображения информации о файлах и каталогах в файловой системе. ls Утилита является частью основных утилит пакета GNU , который установлен на все дистрибутивы Linux.

Как использовать ls команду

Синтаксис ls команды следующий:

При использовании без параметров и аргументов ls отображает список имен всех файлов в текущем рабочем каталоге :

Файлы перечислены в алфавитном порядке:

Читайте также:  Press any key to boot from usb ничего не происходит windows

Чтобы вывести список файлов в определенном каталоге, передайте путь к каталогу в качестве аргумента команды ls. Например, чтобы просмотреть содержимое /etc каталога, вы должны набрать:

Вы также можете передать несколько каталогов и файлов в ls команду через пробел:

Если пользователь, в который вы вошли, не имеет прав на чтение каталога, вы получите сообщение о том, что он ls не может открыть каталог:

У ls команды есть несколько опций. В следующих разделах мы рассмотрим наиболее часто используемые параметры.

Подробный формат списка

Вывод команды по умолчанию ls показывает только имена файлов и каталогов, что не очень информативно.

Параметр -l (нижний регистр L) ls позволяет печатать файлы в формате длинного списка.

Если используется формат длинного списка, ls команда отобразит следующую информацию о файле:

  • Тип файла
  • Файл разрешений
  • Количество жестких ссылок на файл
  • Владелец файла
  • Файловая группа
  • Размер файла
  • Дата и время
  • Имя файла

Рассмотрим следующий пример:

Давайте объясним наиболее важные столбцы вывода.

Первый символ показывает тип файла. В нашем примере первый символ — указывает на обычный файл. Значения для других типов файлов следующие:

  • — — обычный файл
  • b — заблокировать специальный файл
  • c — Специальный символьный файл
  • d — Справочник
  • l — символическая ссылка
  • n — Сетевой файл
  • p — FIFO
  • s — Разъем

Следующие девять символов показывают права доступа к файлу. Первые три символа предназначены для пользователя, следующие три — для группы, а последние три — для других. Вы можете изменить права доступа к файлу с помощью chmod команды. Символ разрешения может принимать следующее значение:

  • r — Разрешение на чтение файла
  • w — разрешение на запись в файл
  • x — Разрешение на выполнение файла
  • s — установить бит
  • t — липкий бит

В нашем примере rw-r—r— означает, что пользователь может читать и записывать файл, а группа и другие пользователи могут только читать файл. Число 1 после символов разрешения — это количество жестких ссылок на этот файл.

Следующие два поля root root показывают владельца файла и группу, за которыми следует размер файла ( 337 ) в байтах. Используйте эту -h опцию, если вы хотите напечатать размеры в удобочитаемом формате. Вы можете изменить владельца файла с помощью chown команды.

Oct 4 11:31 — дата и время последнего изменения файла.

Последний столбец — это имя файла.

Показать скрытые файлы

По умолчанию ls команда не показывает скрытые файлы. В Linux скрытым файлом является любой файл, начинающийся с точки ( . ).

Чтобы отобразить все файлы, включая скрытые, используйте -a параметр:

Сортировка вывода

Как уже упоминалось, по умолчанию ls команда выводит файлы в алфавитном порядке.

—sort Опция позволяет сортировать вывод по расширению, размеру, времени и версии:

  • —sort=extension (или -X ) — сортировка по алфавиту по расширению.
  • —sort=size (или -S ) — сортировка по размеру файла.
  • —sort=time (или -t ) — сортировка по времени модификации.
  • —sort=version (или -v ) — Естественный вид номеров версий.

Если вы хотите получить результаты в обратном порядке сортировки, используйте -r опцию.

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

Стоит отметить, что ls команда не показывает общее пространство, занимаемое содержимым каталога. Чтобы получить размер каталога, используйте du команду.

Рекурсивный список каталогов

-R Опция указывает ls команду , чтобы отобразить содержимое подкаталогов рекурсивно:

Вывод

Команда ls выводит информацию о файлах и каталогах.

Для получения дополнительной информации ls посетите страницу GNU Coreutils или введите man ls свой терминал.

Источник

Оцените статью