Вывести рекурсивно на экран список файлов и каталогов в директории var log

Обновлено: 03.07.2024

как рекурсивно подсчитывать файлы в каталоге Linux?

Я нашел вот это:

но когда я запускаю это, он возвращает следующую ошибку.

find: пути должны предшествовать выражению:/

это должно работать:

объяснение:

  • -type f включить только файлы.
  • | (, а не ¦ ) перенаправляет find стандартный вывод команды в wc стандартный ввод команды.
  • wc (сокращенно от word count) подсчитывает новые строки, слова и байты на своем входе (docs).
  • -l считать только новая строка.

Примечания:

  • заменить DIR_NAME С . для выполнения команды в текущей папке.
  • вы также можете удалить -type f включить каталоги (и симлинки) в кол.
  • возможно, эта команда будет пересчитана, если имена файлов могут содержать символы новой строки.

объяснение, почему ваш пример не работает:

для текущего каталога:

Если вы хотите разбивку, сколько файлов в каждом каталоге под вашим текущим dir:

что может пойти все на одной линии, конечно. Скобки уточняют, чей вывод wc -l должен смотреть ( find $i -type f в данном случае).

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

(на машине Debian / Mint / Ubuntu Linux).

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

скрытые файлы могут быть включены также, поставляя -a выбор.

на моем компьютере, rsync немного быстрее, чем find | wc -l в принятом ответе. Например, вы можете подсчитать файлы в /Users/joe/ такой:

вторая строка имеет количество файлов, 150,481 в приведенном выше примере. В качестве бонуса вы получаете общий размер (в байтах).

  • первая строка-это количество файлов, каталогов, символических ссылок и т. д. Все вместе, поэтому она больше, чем вторая линия.
  • на --dry-run (или -n для краткости) опция важна, чтобы на самом деле не передавать файлы!
  • на /xxx параметром может быть любая пустая или несуществующая папка. Не используйте / здесь.
  • я использовал -x опция "не пересекать границы файловой системы", что означает, если вы выполняете ее для / и у вас есть внешние жесткие диски, он будет считать только файлы на корневом разделе.

Он может обрабатывать нечетные вещи, такие как имена файлов, которые включают скобки пробелов и даже новые строки. Он также сортирует выходные данные по количеству файлов.

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

Если вы хотите знать, сколько файлов и подкаталогов существует из настоящего рабочего каталога, вы можете использовать этот однострочный

Это будет работать в GNU flavour и просто опустить-e из команды echo для BSD linux (например, OSX).

если вы хотите избежать случаев ошибок, не позволяйте wc -l чтобы увидеть файлы с новыми строками (которые будут считаться 2+ файлами)

например, рассмотрим случай, когда у нас есть один файл с одним символом EOL в нем

по крайней мере, с gnu wc не похоже, что у вас есть возможность читать / считать список с нулевым завершением (кроме файла), самым простым решением было бы просто не передавать его имена файлов, но статический вывод каждый раз, когда файл найден, например, в том же каталог как выше

или если ваш find поддерживает

поскольку имена файлов в UNIX могут содержать новые строки (да, новые строки), wc -l может слишком много файлов. Я бы напечатал точку для каждого файла, а затем подсчитал точки:

чтобы определить, сколько файлов есть в текущем каталоге, поместить в ls -1 | wc -l . Это использует wc сделать подсчет количества строк (-l) производства ls -1 . Это не считается dotfiles. Обратите внимание, что ls -l (это "L", а не" 1", как в предыдущих примерах), который я использовал в предыдущих версиях этого HOWTO, фактически даст вам количество файлов на один больше, чем фактическое количество. Спасибо Кам Неджаду за это.

если вы хотите считать только файлы и не включают символические ссылки (просто пример того, что еще вы могли бы сделать), вы можете использовать ls -l | grep -v ^l | wc -l (это "L", а не" 1 "на этот раз, мы хотим" длинный " список здесь). grep проверяет наличие любой строки, начинающейся с " l " (с указанием ссылки), и отбрасывает эту строку (- v).

относительная скорость: "ls -1 / usr/ bin | /wc-l" занимает около 1,03 секунды на выгруженном 486SX25 (/usr/ bin / на этой машине имеет 355 файлов). " ls -l /usr/bin/ | grep -v ^l | wc -l " занимает около 1.19 секунды.

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

enter image description here

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

чтобы установить его на Ubuntu:

  • find . -type f | wc -l : около 1m20s для завершения
  • ncdu : около 1m20s для завершения

Я написал ffcnt для ускорения рекурсивного подсчета файлов при определенных обстоятельствах: вращающиеся диски и файловые системы, поддерживающие отображение экстента.

Он может быть на порядок быстрее, чем ls или find подходы, но YMMV.

Ok, который не рекурсивно подсчитывает файлы, но я хотел сначала показать простой вариант. Распространенным вариантом использования может быть создание резервных копий файла с опрокидыванием. Это создаст файл журнала.1, logfile.2, logfile.3 и т. д.

чтобы получить количество файлов рекурсивно, мы все еще можем использовать find таким же образом.

здесь . - Это папка для просмотра и 10 - количество символов, для группы справочника.

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

В этой статье мы рассмотрим самые часто используемые команды Linux для работы с файлами и каталогами, после их освоения терминал больше не будет казаться таким непонятным и объемлемым. Вот какие команды будут нас сегодня интересовать:

  • ls - список файлов в директории;
  • cd - переход между директориями;
  • rm - удалить файл;
  • rmdir - удалить папку;
  • mv - переместить файл;
  • cp - скопировать файл;
  • mkdir - создать папку;
  • ln - создать ссылку;
  • chmod - изменить права файла;
  • touch - создать пустой файл.

А теперь перейдем к подробному рассмотрению всех этих команд.

1. ls - просмотр содержимого папки

Команда ls позволяет вывести список файлов заданной папки, по умолчанию, будет выведен список файлов текущей папки:


Вы можете вывести список файлов из всех подкаталогов рекурсивно, для этого используйте опцию -R:

Чтобы вывести список файлов нужной папки, вы можете передать ее адрес утилите, например, /home:


Чтобы получить больше информации и вывести все имена файлов в виде списка используйте опцию -l:


2. cd - изменить папку

Команда cd позволяет изменить текущую папку на другую. По умолчанию, текущей считается домашняя папка, например, cd Desktop меняет папку на рабочий стол, если вы выполните ее из домашнего каталога:


Вы также можете указать полный путь к папке:


Команда cd .. переходит в папку, которая находится выше на одну в файловой системе:


Вы также можете вернуться в предыдущую рабочую папку:

3. rm - удалить файлы

Команда rm позволяет удалить файл. Будьте очень осторожны с ней, она не будет спрашивать подтверждения:


Например, rm file удалит файл с именем file, который находится в текущей папке. Как и в предыдущих вариантах, вы можете указать полный путь к файлу linux. Например:

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

rm -r /home/user/photo/

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

4. rmdir - удалить папку

Команда rmdir позволяет удалить пустую папку. Например, команда rmdir directory удалит папку directory, которая находится в текущей папке:


Если вам нужно удалить папку с файлами, то нужно использовать утилиту rm вместе с опцией -r.

5. mv - перемещение файлов

Команда mv перемещает файл в новое место. Она также может использоваться для переименования файлов. Например, mv file newfile переименует файл file в newfile:

mv file newfile


Чтобы переместить файл в другую папку нужно указать путь к ней, например, переместим файл file в папку /home/user/tmp/

mv file /home/user/tmp/

6. cp - копирование файлов

Эта cp и mv - это похожие команды linux для работы с файлами. Они работают аналогичным образом, только исходный файл остается на своем месте.

cp file newfile


Вы также можете рекурсивно скопировать всю папку с помощью команды cp -r. Эта команда скопирует всю папку вместе со всеми файлами и вложенными папками в новое место. Например, скопируем папку /etc/:

cp -r /etc /etc_back

7. mkdir - создать папку

Команда mkdir позволяет создать новую папку mkdir test создаст папку в текущем каталоге:


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

8. ln - создание ссылок

Утилита ln позволяет создавать жесткие и символические ссылки на файлы или папки. Для создания символической ссылки используется опция -s. Например, вы создадим ссылку на папку с загрузками:

ln -s /home/user/Downloads/ /home/user/test/


Для создания жесткой ссылки никаких опций задавать не нужно:

ln /home/user/Downloads/ /home/user/test/

9. chmod - изменить права

chmod позволяет изменить права доступа к файлам. Например, chmod +x script.sh добавляет флаг исполняемости к файлу script.sh:

chmod +x script.sh


Чтобы убрать флаг исполняемый используйте опцию -x:

chmod -x script.sh


Подробнее о том, как работают разрешения для файлов смотрите в статье права доступа к файлам в Linux.

10. touch - создать файл

Команда touch создает пустой файл. Например, touch file создаст пустой файл в текущей папке с именем file:


Для создания файлов через терминал существует еще несколько команд, они рассмотрены в статье как создать файл в linux.

11. mc

Работа с файлами Linux через терминал может выполняться не только с помощью обычных консольных команд, каждая из которых выполняет только определенное действие. Вы можете использовать полнофункциональный файловый менеджер с псевдографическим интерфейсом на основе ncurses. Midnight Commander - это файловый менеджер, который можно использовать прямо в терминале. Для установки mc в Ubuntu выполните:

sudo apt install mc

После завершения установки достаточно выполнить команду mc:


Используйте клавиши со стрелками для перемещения по файлах, Tab для перехода на другую панель, Alt+1 для просмотра справки и Alt+2 для вывода меню:


Если терминальное окружение поддерживает мышь, то вы можете ее использовать в Midnight Commander.

Выводы

В этой статье мы рассмотрели как выполняется работа с файлами и каталогами в linux, с помощью терминала. Когда вы освоите все эти команды, вы сможете сделать большинство основных действий в терминале. А как часто вы пользуетесь терминалом? Используете его для работы с файлами? Напишите в комментариях!

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

-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 , вместо символьных имён:

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

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

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

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


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


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


Вы также можете передать несколько каталогов и файлов в 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 свой терминал.

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

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

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

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

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

Файлы перечислены в алфавитном порядке в столько столбцов, сколько может поместиться на вашем терминале:

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

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

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

Формат длинных списков

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

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

Когда используется формат длинного списка, вы можете увидеть следующую информацию о файле:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Выводы

Команда ls отображает информацию о файлах и каталогах.

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

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

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