ГЛАВА 2. Доступ к файлам

1.2. thead – печать начала каждого файла


    ИМЯ: thead

thеаd Печатает заголовок (первые несколько строк) файлов.

Что такое просмотр в виде дерева?

Давайте рассмотрим пример папки проекта Bootstrap, как показано ниже, с разными папками для таблиц стилей CSS и файлов JavaScript (JS).

bootstrap/
├── dist/
│   ├── css/
│   └── js/
├── docs/
│   └── examples/
├── js/
└── scss/

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

Программы для Windows, мобильные приложения, игры – ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале – Подписывайтесь:)

bootstrap/
├── css/
│   ├── bootstrap-grid.css
│   ├── bootstrap-grid.css.map
│   ├── bootstrap-grid.min.css
└── js/
    ├── bootstrap.bundle.js
    ├── bootstrap.bundle.min.js
    ├── bootstrap.bundle.min.js.map
    ├── bootstrap.js
    ├── bootstrap.min.js

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

Здесь идет использование древовидной структуры. В Windows есть команда «Дерево», которая позволяет просматривать файлы / папки в древовидной структуре. Вы действительно можете загрузить структуру любого каталога с помощью древовидной команды и использовать ее для справки.

1.1. tree – визуализация файлового дерева


    ИМЯ:  TREE

tree – вывод на экран структуры файлового дерева

1.3. tgrep – поиск строк в дереве файловой системы


    ИМЯ: tgrep

tgrep Поиск строки по шаблону в дереве файлов

Возможные исследования


В чем разница между двумя следующими операторами?

   grep "$1" `find "$2" -print`
   и
   find "$2" -print | while read F
   do
      grep "$1" $F
   done

Они кажутся совершенно похожими, но существует
различие в главном. Первый оператор – это один вызов команды
grep. Аргументами являются множество имен файлов, поставляемых
командой find. Если find сгенерирует слишком много имен файлов,
то выполнение команды завершится.

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

Назад | Содержание | Вперед

Возможные модификации

Для увеличения гибкости хорошо бы добавить опции,
чтобы вы могли переходить на команду find непосредственно из
thead. Полезными аргументами были бы -name для изолирования образцов
имен файлов и -ctime для обработки изменений, связанных со временем.


Еще одной привлекательной особенностью было бы добавление
опции грамматического разбора (основанной на -) и опции -n, указывающей,
что из команды head должно быть напечатано n строк.

:/>  Решено: Как проверить командой telnet, открыт ли порт, Как пользоваться ping и traceroute | REG.RU

Как загрузить древовидное представление каталогов в windows 10?

Есть два способа просмотреть папки в древовидной структуре.

  • Использование команды tree в проводнике
  • Получить древовидную структуру из командной строки

Команда cut для bsd

В системе BSD нет команды cut, но следующий командный
файл все же “вырезает” первое непустое поле в текущем
аргументе. Предположим, мы используем команду для генерации
целого набора строк. В данном случае это команда who:

    for NAME in 'who | sed "s/^([^ ]*).*/1/"'
    do
    done

Для каждой обнаруженной строки (аргумента) команда
sed должна подставить вторую строку символов вместо первой строки.
Первая строка – это строка, которая вырезается. Мы ищем от начала
строки (^) символ, отличный от пробела ([^ ]), за которым следует
любое число непустых символов (*).

Эта операция прерывается
по достижении пробела. Набор непустых символов ограничивается
обратными косыми чертами ( и ). Впоследствии ссылка на этот
набор дается в виде 1. Символы .* означают, что после того,
как найден пробел, необходимо считать подходящими все символы
до конца строки.

В этом месте мы подходим к знакам ударения (`),
окаймляющим все выражение. Они берут результат работы всех команд,
заключенных в знаки ударения и передают на следующую охватывающую
структуру в наших вложенных выражениях. Этот следующий уровень
окаймления указан кавычками.

Кавычки превращают символ в строку,
чтобы его можно было сравнить с символом “-“. Следующий
слой – квадратные скобки, указывающие условие для оператора if.
Это приводит к тому, что генерируется нулевое (истина) или ненулевое
(ложь) условие, которое управляет тем, будет ли выполнена часть
then оператора if-then.


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

Остальная часть командного файла представляет собой
один огромный оператор выбора (case). Аргументом, используемым
для ветвления, является число позиционных параметров в командной
строке. Если позиционных параметров нет, то в строках 11-19 активируется
цикл while.

Заметим, что цикл while выполняет оператор чтения,
но не указывает, откуда дол- жен быть взят его вход. Это связано
с тем, что входом по умолчанию является стандартный ввод (stdin).
Для каждого имени файла, которое читается из стандартного ввода,
запускается команда file системы UNIX.

Фактический выход команды fgrep перенаправляется
на нулевое устройство (в бесконечную область памяти), поскольку
он нам не нужен. Нас интересует лишь код возврата после выполнения
всего конвейера. Если команды file и fgrep отработали успешно,
кодом возврата является ноль.

Это истинное значение, поэтому
выполняется участок цикла после then (строки 14-17). Если
файл не существует или не является текстовым, то код возврата
ненулевой, и условный оператор завершается. Это приводит нас
в конец цикла, выполняется следующая итерация цикла while и мы
рассматриваем следующий аргумент из стандартного ввода.

:/>  Лучшие программы для очистки и оптимизации компьютера

Теперь рассмотрим обработку, выполняемую по then
(строки 14-17). Для каждого файла, который является текстовым,
печатается строка двоеточий (:) до и после имени файла, а команда
head системы UNIX печатает первые 15 строк. Такой сценарий продолжается,
пока не закончатся данные в стандартном вводе.

Рассмотрим другую альтернативу, покрываемую данным
оператором выбора. Она обрабатывает ситуацию, когда имеется
несколько позиционных параметров (что указано символом * в операторе
case). Цикл for пробегает все параметры (строка 20). Звездочка
(*) в операторе case означает, что подходит любое значение, которое
не подошло ранее.

Это улавливающая (catchall) опция. Цикл for
использует аргумент $* в качестве своего входа. Он представляет
значения всех позиционных параметров, что является фактически
всей командной строкой, исключая имя утилиты. Команда find используется
для поиска всех нормальных файлов в каталоге.

“Нормальные”
файлы не означает “только текстовые файлы”, поэтому
мы проверим это позже. Выход команды find передается по каналу
команде sort, чтобы сделать его более наглядным. Отсортированный
список передается по каналу в цикл while, который помещает имя
файла в переменную FILE (строка 27). Проверяется, текстовый ли
файл, затем он печатается командой head.

Если мы сравним строки 13-18 и строки 24-29, то
мы увидим, что это один и тот же код. В большинстве языков программирования
это означало бы, что мы должны оформить эти строки как процедуру
и вызывать ее, когда нужно. Язык программирования интерпретатора
shell, хотя и довольно мощный, не имеет хорошего способа
реализации процедур.

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

Назначение


Пройти файловое дерево и напечатать первые несколько
строк каждого файла. Если не указан каталог, то thead действует
как фильтр.

Переменные среды выполнения

FILE Содержит имя каждого файла
OPT Содержит специальные опции команды find
STRING Временная переменная, в которой содержится строка поиска

Пример вызова

$ find $HOME/src -name "*.c" -print | sort | thead

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

Примеры

    1.  $ tgrep unix $HOME

Поиск любого вхождения слова unix во всех файлах
моего регистрационного каталога.

    2.  $ tgrep -c "^sleep()$" $HOME/src


Поиск выражения (начало строки, символьная строка,
конец строки) во всех исходных файлах на языке Си в регистрационном
каталоге с исходными текстами (опция -c).

    3.  # find /usr/src -name "*.c" -print | tgrep "ioctl"

Поиск всех вызовов ioctl в исходных Си-файлах, начиная
с каталога /usr/src. (Обратите внимание, что я являюсь суперпользователем.
Это видно из того, что я занимаюсь поиском в ограниченной части
системы, а именно в исходных дистрибутивах, а также из того,
что в качестве символа приглашения используется символ “#”.)

    4.  $ tgrep "| more" `find . -type f -print`

Поиск символа вертикальной черты (|), после которого
следует слово more, в списке имен файлов, генерируемом оператором
find. Find печатает имена всех файлов текущего каталога и всех
подкаталогов, которые являются обычными файлами.

:/>  Как отключить клавиатуру ноутбука в Windows 10

    5.  $ tgrep trap /bin /usr/bin /etc


Поиск команды прерывания (trap) во всех командных
файлах интерпретатора shell, которые имеются в трех каталогах.

Просмотр древовидной структуры с помощью командной строки

Теперь вы можете использовать команду «Дерево» в командной строке и сразу же просматривать формат древовидной структуры всех файлов. Следуйте инструкциям, приведенным ниже:

Здесь вы можете использовать команду «Дерево» двумя способами. Один из способов — напрямую использовать команду tree и просматривать файловую структуру. Проблема с этим способом в том, что иногда может быть очень много файлов. Вы не можете просмотреть все сразу, потому что он продолжает прокручиваться вниз.

  • Для быстрого просмотра перейдите к папке / диску, для которого вы хотите увидеть структуру. Введите команду «Дерево» и нажмите клавишу ввода. Убедитесь, что вы используете эту команду там, где количество папок меньше.

Синтаксис команды tree:

cmd /c TREE [Drive:][Path] [/F] [/A]
  • cmd / c используется для запуска командной строки.
  • Дерево — это имя команды для создания структуры.
  • / F — это список всех файлов в каждой папке. Без этого параметра будут перечислены только папки без файлов.
  • / A для экспорта результата в файл.
  • > Resultant.txt — это имя файла в текстовом формате, вы также можете использовать что-то вроде tree.doc для создания файла в формате документа.
  • Нажмите клавишу ввода на клавиатуре. После этого в папке SWSetup будет создан новый файл с именем Resultant.
  • Дважды щелкните файл, и вы сможете увидеть структурированный древовидный формат всех файлов в папке SWSetup.
Результирующее древовидное представление каталога

Результирующее древовидное представление каталога

Вы можете создать древовидную структуру для любой конкретной папки. Если папка находится в «D: test», вы должны использовать следующую команду в адресной строке проводника. Он создаст файл tree.doc в папке D: test.

cmd /c "tree D:test /f /a > tree.doc"

Связанный: Исправьте медленный ноутбук и ускорьте Windows 10.

Просмотр древовидной структуры с помощью командной строки

Теперь вы можете использовать команду «Дерево» в командной строке и сразу же просматривать формат древовидной структуры всех файлов. Следуйте инструкциям, приведенным ниже:

Здесь вы можете использовать команду «Дерево» двумя способами. Один из способов — напрямую использовать команду tree и просматривать файловую структуру. Проблема с этим способом в том, что иногда может быть очень много файлов. Вы не можете просмотреть все сразу, потому что он продолжает прокручиваться вниз. Это будет слишком быстро и также увеличит размер буфера. Второй способ заключается в том, что вы можете экспортировать его в простой текстовый файл, как мы это делали раньше, но на этот раз через CMD.

  • Для быстрого просмотра перейдите к папке / диску, для которого вы хотите увидеть структуру. Введите команду «Дерево» и нажмите клавишу ввода. Убедитесь, что вы используете эту команду там, где количество папок меньше.

Формат вызова

    tgrep [-c|-h] string [file ...]

Оставьте комментарий

Adblock
detector