Переместить в тестовую папку z все текстовые файлы, имя которых состоит из двух или более символов

Обновлено: 04.07.2024

Python предоставляет встроенные функции и модули для поддержки этих операций.

Открытие/закрытие файла

Чтение/запись текстовых файлов

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

Чтение строки/строк из текстового файла
  • fileObj.readline() -> str : (наиболее часто используемый) Читает следующую строку (до и включая новую строку) и возвращает строку (включая новую строку). Он возвращает пустую строку после конца файла (EOF).
  • fileObj.readlines() -> [str] : чтение всех строк в список строк.
  • fileObj.read() -> str : чтение всего файла в строку.
Запись строки в текстовый файл
  • fileObj.write(str) -> int : Записать заданную строку в файл и вернуть количество записанных символов. Вам нужно явно завершить str с помощью '\n' , если это необходимо. '\n' будет преобразован в новую строку в зависимости от платформы ("\r\n" для Windows или '\n' для Unix/Mac OS).
Примеры

Построчная обработка текстового файла

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

Выражение with эквивалентно выражению try-finally следующим образом:

Пример: построчное копирование файла

Следующий скрипт копирует один файл в другой построчно, добавляя перед каждой строкой номер строки.

Операции с двоичными файлами

  • fileObj.tell() -> int : возвращает текущую позицию в потоке. Текущая позиция потока — это количество байтов от начала файла в двоичном режиме и непрозрачное число в текстовом режиме.
  • fileObj.seek(смещение): устанавливает текущую позицию в потоке на смещение байт от начала файла.

Например, [ЗАДАЧ]

Каталог и управление файлами

В Python управление каталогами и файлами поддерживается модулями os , os.path , Shutil , .

Операции с путями с использованием модуля os.path

В Python путь может означать:

  1. файл,
  2. каталог или
  3. символическая ссылка (символическая ссылка).

Путь может быть абсолютным (начиная с корня) или относительным относительно текущего рабочего каталога (CWD).

Разделитель пути зависит от платформы (Windows использует '\' , а Unix/Mac OS использует ' /' ). Модуль os.path поддерживает независимые от платформы операции над путями, разумно обрабатывая разделитель путей.

Проверка существования и типа пути
  • os.path.exists(path) -> bool : проверить, существует ли указанный путь.
  • os.path.isfile(путь_к_файлу) , os.path.isdir(путь_к_каталогу) , os.path.islink(путь_ссылки) -> bool : проверить, является ли указанный путь файлом, каталогом или символической ссылкой.
Формирование нового пути

Разделитель пути зависит от платформы (Windows использует '\' , а Unix/Mac OS использует '/' ). Для переносимости важно НЕ жестко кодировать разделитель пути. Модуль os.path поддерживает независимые от платформы операции над путями, разумно обрабатывая разделитель путей.

  • os.path.sep : разделитель путей текущей системы.
  • os.path.join(path, *paths) : формирование и возврат пути путем объединения одного или нескольких компонентов пути путем вставки зависящего от платформы разделителя пути ( '/' или '\' ). Чтобы сформировать абсолютный путь, вам нужно начать с os.path.sep от имени пользователя root.
Управление именем каталога и именем файла
  • os.path.dirname(путь) : возвращает имя каталога для заданного пути (файл, каталог или символическая ссылка). Возвращаемое имя каталога может быть абсолютным или относительным, в зависимости от заданного пути.
  • os.path.abspath(path) : возвращает абсолютный путь (начиная с корня) заданного path . Это может быть абсолютное имя файла, абсолютное имя каталога или абсолютная символическая ссылка.

Например, чтобы сформировать абсолютный путь к файлу с именем out.txt в том же каталоге, что и in.txt , вы можете извлечь абсолютное имя каталога из in.txt , а затем присоединиться к out.txt следующим образом:

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

Обработка символической ссылки (Unixes/Mac OS)
  • os.path.realpath(path) : (для символических ссылок) Аналогично abspath() , но возвращает канонический путь, исключая любые встречающиеся символические ссылки.

Управление каталогами и файлами с помощью модулей os и Shutil

Модули os и Shutil обеспечивают интерфейс к операционной системе и системной оболочке.

  • Если вы хотите просто прочитать или записать файл, используйте встроенную функцию open() .
  • Если вы просто хотите управлять путями (файлами, каталогами и символическими ссылками), используйте модуль os.path.
  • Если вы хотите прочитать все строки во всех файлах в командной строке, используйте модуль ввода файлов.
  • Для создания временных файлов/каталогов используйте модуль tempfile.
Управление каталогом
Управление файлами
  • os.rename(src_file, dest_file) : переименовать файл.
  • os.remove(файл) или os.unlink(файл): удалить файл. Вы можете использовать os.path.isfile(file), чтобы проверить, существует ли file.

Например [TODO],

Список каталогов
  • os.listdir(path='.') -> [path] : список всех записей в данном каталоге (исключая '.' и '..' ), по умолчанию текущий каталог.
Рекурсивное отображение каталога с помощью os.walk()
  • os.walk(top, topdown=True, onerror=None, followlinks=False): рекурсивно перечислить все записи, начиная с top .
Рекурсивное отображение каталога с помощью модуля glob (Python 3.5)
Копирование файла
Команда оболочки [TODO]
  • os.system(command_str) : запустить команду оболочки. (В Python 3 вместо этого используйте subprocess.call().)
Переменные среды [TODO]
  • os.getenv(varname, value=None) : возвращает переменную среды, если она существует, или value, если ее нет. , по умолчанию нет .
  • os.putenv(имя_переменной, значение) : установите для переменной среды значение значение.
  • os.unsetenv(имя_переменной): удалить (сбросить) переменную среды.

модуль ввода файла

Модуль fileinput обеспечивает поддержку обработки строк ввода из одного или нескольких файлов, указанных в аргументах командной строки ( sys.argv ). Например, создайте следующий скрипт с именем " test_fileinput.py ":

Обработка текста

Для простых операций с текстовыми строками, таких как поиск и замена строк, можно использовать встроенные строковые функции (например, str.replace(old, new)) ) . Для поиска и замены сложных шаблонов вам необходимо освоить регулярное выражение (регулярное выражение).

Операции со строками

Встроенный класс str предоставляет множество функций-членов для работы с текстовыми строками. Предположим, что s — это объект str.

Удалить пробелы (пробел, табуляция и новая строка)
  • s.strip()-> str : возвращает копию строки s с удаленными начальными и конечными пробелами. Пробелы включают пробел, табуляцию и новую строку.
  • s.strip([chars]) -> str : удаляет заданные начальные/конечные символы вместо пробелов.
  • s.rstrip() , s.lstrip() -> str : удаляет правые (конечные) пробелы и левые (начальные) пробелы соответственно.< /li>

s.rstrip() чаще всего используется для удаления завершающих пробелов/перевода строки. Ведущие пробелы обычно имеют значение.

Верхний/нижний регистр
  • s.upper() , s.lower() -> str : возвращает копию строки s, преобразованную в верхний и нижний регистр. соответственно.
  • s.isupper() , s.islower() -> bool : проверьте, является ли строка прописной или строчной, соответственно.
  • s.find(key_str, [начало], [конец]) -> int|- 1 : вернуть самый низкий индекс в срезе s [начало:конец] (по умолчанию вся строка); или -1, если не найдено.
  • s.index(key_str, [начало], [конец]) -> int|ValueError : аналогично find() , но вызывает ValueError, если не найдено.
  • s.startswith(key_str, [начало], [конец]) , s .endsswith(key_str, [начало], [конец]) -> bool : проверить, начинается или заканчивается строка с key_str .
Найти и заменить
  • s.replace(old, new, [count]) -> str : вернуть копию при этом все вхождения old заменены на new . Необязательный параметр count ограничивает количество заменяемых вхождений, по умолчанию все вхождения.

str.replace() идеально подходит для простой замены текстовой строки без необходимости сопоставления с образцом.

Разделить на токены и объединить
  • s.split([sep], [maxsplit=-1]) -> [str] : возвращает список слов. используя sep в качестве строки-разделителя. Разделителем по умолчанию являются пробелы (пробел, табуляция и новая строка). maxSplit ограничивает максимальное количество операций разделения, по умолчанию -1 означает отсутствие ограничений.
  • sep.join([str]) -> str : обратный метод split() .Присоединяйтесь к списку строк с помощью sep в качестве разделителя.

Регулярное выражение в модуле re

Я предполагаю, что вы знакомы с регулярными выражениями, иначе вы могли бы прочитать:

  • "Регулярное выражение на примерах" для обзора синтаксиса регулярных выражений и примеров.
  • "Регулярные выражения" для полного охвата.

Модуль re обеспечивает поддержку регулярных выражений (regex).

Обратная косая черта ( \ ), исходная строка Python r'. ' против обычной строки

В синтаксисе регулярного выражения используется обратная косая черта ( \ ):

  1. для метасимволов, таких как \d (цифра), \D (не цифра), \s (пробел), \S (не пробел), \w (слово), \W (не слово)
  2. для экранирования специальных символов регулярных выражений, например, \. для . , \+ для + , \* для * , \? для ? . Вам также нужно написать \\ для соответствия \ .

С другой стороны, обычные строки Python также используют обратную косую черту для управляющих последовательностей, например, \n для новой строки, \t для табуляции. Опять же, вам нужно написать \\ вместо \ .

Чтобы записать шаблон регулярного выражения \d+ (одна или несколько цифр) в обычную строку Python, вам нужно написать '\\d+' . Это громоздко и чревато ошибками.

Решение Python использует необработанную строку с префиксом r в форме r'. ' . Он игнорирует интерпретацию управляющей последовательности строки Python. Например, r'\n' — это '\'+'n' (два символа) вместо новой строки (один символ). Используя необработанную строку, вы можете написать r'\d+' для шаблона регулярного выражения \d+ (вместо обычной строки '\\d+' ).

Кроме того, Python обозначает обратные ссылки в скобках (или группы захвата) как \1 , \2 , \3 , . которые могут быть записаны как необработанные строки r'\1' , r'\2' вместо обычных строк '\\1' и '\\2' . Обратите внимание, что в некоторых языках используются $1, $2, . для обратных ссылок.

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

Компиляция (создание) объекта шаблона регулярных выражений
Вызов операций регулярных выражений

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

  1. regexObj.func(str): применить скомпилированное регулярное выражение object к str , через функцию-член SRE_Pattern func() .
  2. re.func(regexObj|regexStr, str) : применить объект регулярного выражения (скомпилированный) или < em>regexStr (не скомпилировано) в str через функцию уровня модуля re func() . Эти функции уровня модуля представляют собой ярлыки для описанных выше, которые не требуют предварительной компиляции объекта регулярного выражения, но пропускают модификаторы, если используется regexStr.
Найти с помощью finalAll()
  • regexObj.findall(str) -> [str] : возвращает список всех совпадающих подстрок.
  • re.findall(regexObj|regexStr, str) -> [str] : то же, что и выше.
Заменить с помощью sub() и subn()
  • regexObj.sub(replaceStr, inStr, [count=0]) -> outStr: заменить (заменить) совпавшие подстроки в заданном inStr на replaceStr , до количества вхождений, по умолчанию все.
  • regexObj.subn(replaceStr, inStr, [count=0]) -> (outStr, count): аналогично sub() , но возвращает новую строку вместе с количеством замен в двух кортежах.
  • re.sub(regexObj|regexStr, replaceStr, inStr, [count=0]) ->outStr: то же, что и выше.
  • re.subn(regexObj|regexStr, replaceStr, inStr, [count=0]) -> (outStr, count) : то же, что и выше.

Примечания. Для простой замены строки используйте str.replace(old, new, [max= -1]) -> str, что более эффективно. См. раздел выше.

Использование обратных ссылок в скобках \1 , \2 , . в замене и шаблоне

В Python обратные ссылки в круглых скобках регулярных выражений (группы захвата) обозначаются как \1 , \2 , . Вы можете использовать необработанную строку (например, r'\1' ), чтобы избежать экранирования обратной косой черты в обычной строке (например, '\\1' ).

Найти с помощью search() и Match Object

Поиск() возвращает специальный объект Match, инкапсулирующий первое совпадение (или None, если совпадений нет). Затем вы можете использовать следующие методы для обработки результирующего объекта Match:

  • matchObj.group() : возвращает совпадающую подстроку.
  • matchObj. start() : возвращает начальную совпадающую позицию (включительно).
  • matchObj. end() : возвращает конечную совпавшую позицию (эксклюзивно).
  • matchObj. span() : возвращает кортеж совпадающей позиции (начало, конец).

Чтобы получить обратные ссылки (или группы захвата) внутри объекта Match:

  • matchObj. groups() : возвращает кортеж захваченных групп (или обратных ссылок)
  • matchObj .group(n) : возвращает захватываемую группу n , где n начинается с 1 .
  • matchObj.lastindex : последний индекс захватываемой группы
Поиск с использованием match() и fullmatch()

Search() соответствует любому заданному элементу inStr[begin:end] . С другой стороны, match() соответствует с начала inStr[начало:конец] (аналогично в шаблон регулярного выражения ^. ); в то время как fullmatch() соответствует всему inStr[begin:end] (аналогично шаблону регулярного выражения ^. $ ).

Найти с помощью finditer()

Функция finditer() аналогична функции findall(). findall() возвращает список совпадающих подстрок. Finditer() возвращает итератор для объектов Match. Например,

Разделение строки на токены

Функция split() разбивает заданный inStr на список, используя шаблон регулярного выражения в качестве разделителя (разделителя). Например,

Примечания. Для простого разделителя используйте str.split([sep]) , что более эффективно. См. раздел выше.

Парсинг веб-страниц

Ссылки:

Скрапинг веб-страниц (или сбор веб-страниц или извлечение веб-данных) означает чтение необработанной HTML-страницы для извлечения нужных данных. Излишне говорить, что вам необходимо освоить HTML, CSS и JavaScript.

Python поддерживает просмотр веб-страниц с помощью запросов пакетов и BeautifulSoup (bs4).

Установить пакеты

Вы можете установить соответствующие пакеты с помощью pip следующим образом:

Шаг 0. Проверка целевой веб-страницы
  1. Нажмите F12 на целевой веб-странице, чтобы включить отладчик F12.
  2. Выберите «Инспектор».
  3. Нажмите кнопку "Выбрать" (крайний левый значок со стрелкой) и наведите указатель мыши на нужную часть HTML-страницы. Изучите коды.
Шаг 2. Преобразование HTML-текста в древовидную структуру с помощью BeautifulSoup и поиск нужных данных

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

Вы также можете использовать модуль csv для записи строк данных с заголовком:

Шаг 3. Загрузите выбранный документ с помощью urllib.request

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

Шаг 4. Задержка

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

Теперь мы знаем, как просматривать файлы и каталоги, но как их создавать?

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

Шаг первый: посмотрите, где мы находимся и что у нас уже есть

Мы по-прежнему должны находиться в каталоге shell-lesson-data на рабочем столе, что мы можем проверить, используя:

Далее мы перейдем в каталог для упражнений/записи и посмотрим, что в нем содержится:

Создать каталог

Давайте создадим новый каталог с именем thesis с помощью команды mkdir thesis (у которой нет вывода):

Как можно догадаться по названию, mkdir означает «создать каталог». Поскольку тезис является относительным путем (т. е. не имеет начального слэша, например /what/ever/thesis ), новый каталог создается в текущем рабочем каталоге:

Поскольку мы только что создали каталог тезисов, в нем еще ничего нет:

Обратите внимание, что mkdir не ограничивается созданием отдельных каталогов по одному. Параметр -p позволяет mkdir создать каталог с вложенными подкаталогами за одну операцию:

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

Два способа сделать одно и то же

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

Хорошие имена для файлов и каталогов

  1. Не используйте пробелы.

    Пробелы могут сделать имя более осмысленным, но поскольку пробелы используются для разделения аргументов в командной строке, лучше избегать их в именах файлов и каталоги. Вместо этого вы можете использовать - или _ (например, north-pacific-gyre/ , а не north pacific gyre/ ). Чтобы проверить это, попробуйте ввести mkdir north pacific gyre и посмотрите, какой каталог (или каталоги!) создается при проверке с помощью ls -F .

  2. Не начинайте имя с - (тире).

    Команды рассматривают имена, начинающиеся с -, как параметры.

  3. Наклеивайте буквы, цифры, . (точка или точка), - (тире) и _ (подчеркивание).

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

Создать текстовый файл

Давайте изменим наш рабочий каталог на thesis с помощью cd , затем запустим текстовый редактор Nano, чтобы создать файл с именем draft.txt :

Какой редактор?

Когда мы говорим, что nano — это текстовый редактор, мы на самом деле имеем в виду текст: он может работать только с простыми символьными данными, а не с таблицами, изображениями или любым другим удобным для человека носителем. Мы используем его в примерах, потому что это один из наименее сложных текстовых редакторов. Однако из-за этой особенности он может быть недостаточно мощным или достаточно гибким для работы, которую вам нужно будет выполнить после этого семинара. В системах Unix (таких как Linux и macOS) многие программисты используют Emacs или Vim (на изучение обоих требуется больше времени) или графический редактор, такой как Gedit. В Windows вы можете использовать Notepad++. В Windows также есть встроенный редактор под названием «Блокнот», который можно запустить из командной строки так же, как и nano для целей этого урока.

Независимо от того, какой редактор вы используете, вам необходимо знать где он ищет и сохраняет файлы. Если вы запустите его из оболочки, он (вероятно) будет использовать ваш текущий рабочий каталог в качестве местоположения по умолчанию. Если вы используете меню «Пуск» вашего компьютера, вместо этого он может захотеть сохранить файлы на рабочем столе или в каталоге документов. Вы можете изменить это, перейдя в другой каталог при первом нажатии кнопки «Сохранить как…»

Давайте напечатаем несколько строк текста. Как только мы довольны нашим текстом, мы можем нажать Ctrl + O (нажмите клавишу Ctrl или Control и, удерживая ее, нажмите клавишу O), чтобы записать наши данные на диск (нас спросят, какой файл мы хотим чтобы сохранить это в: нажмите клавишу «Ввод», чтобы принять предложенный по умолчанию вариант draft.txt ).

скриншот текстового редактора nano в действии

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

Control, Ctrl или клавиша ^

  • Control-X
  • Control+X
  • Ctrl + X
  • Ctrl+X
  • ^X
  • C-x

nano не оставляет никаких выводов на экране после выхода, но теперь ls показывает, что мы создали файл с именем draft.txt :

Создание файлов другим способом

Мы увидели, как создавать текстовые файлы с помощью редактора nano. Теперь попробуйте следующую команду:

  1. Что сделала сенсорная команда? Когда вы просматриваете свой текущий каталог с помощью проводника файлов с графическим интерфейсом, отображается ли файл?

  2. Используйте ls -l для проверки файлов. Насколько велик my_file.txt?

  3. В каких случаях вам может понадобиться создать файл таким образом?

Решение

  1. Команда touch создает новый файл с именем my_file.txt в вашем текущем каталоге. Вы можете просмотреть этот вновь сгенерированный файл, набрав ls в командной строке. my_file.txt также можно просмотреть в проводнике файлов с графическим интерфейсом.

  2. При проверке файла с помощью ls -l обратите внимание, что размер файла my_file.txt равен 0 байт. Другими словами, он не содержит данных. Если вы откроете файл my_file.txt в текстовом редакторе, он будет пустым.

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

Что в имени?

Возможно, вы заметили, что все файлы Нелле называются "something dot something", и в этой части урока мы всегда использовали расширение .txt . Это всего лишь соглашение: мы можем назвать файл mythesis или почти что угодно. Тем не менее, большинство людей большую часть времени используют имена, состоящие из двух частей, чтобы помочь им (и их программам) различать разные типы файлов. Вторая часть такого имени называется расширением имени файла и указывает, какой тип данных содержит файл: .txt указывает на обычный текстовый файл, .pdf указывает на PDF-документ, .cfg — это файл конфигурации, полный параметров для какой-либо программы или другое, .jpg — изображение в формате PNG и т. д.

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

Именование PNG-изображения кита поскольку whit.mp3 каким-то волшебным образом не превращает его в запись песни кита, хотя может заставить операционную систему попытаться открыть его с помощью музыкального проигрывателя, когда кто-то дважды щелкнет по нему.

Перемещение файлов и каталогов

Возвращаясь к каталогу shell-lesson-data/writing,

В нашем каталоге тезисов у нас есть черновик файла.txt, имя которого не является особенно информативным, поэтому давайте изменим имя файла, используя mv, сокращение от «move»:

Первый аргумент сообщает mv, что мы «перемещаем», а второй — куда это должно двигаться. В этом случае мы перемещаем thesis/draft.txt в thesis/quotes.txt, что имеет тот же эффект, что и переименование файла. Действительно, ls показывает нам, что тезис теперь содержит один файл с именем quotes.txt:

Нужно быть осторожным при указании имени целевого файла, так как mv молча перезапишет любой существующий файл с таким же именем, что может привести к потере данных. Дополнительный параметр mv -i (или mv --interactive ) можно использовать, чтобы заставить mv запрашивать подтверждение перед перезаписью.

Обратите внимание, что mv также работает с каталогами.

Давайте переместим файл quotes.txt в текущий рабочий каталог. Мы снова используем mv, но на этот раз мы будем использовать только имя каталога в качестве второго аргумента, чтобы сообщить mv, что мы хотим сохранить имя файла, но поместим файл в новое место. (Вот почему команда называется «переместить».) В этом случае имя каталога, которое мы используем, является специальным именем каталога. о которых мы упоминали ранее.

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

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

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

Перемещение файлов в новую папку

После выполнения следующих команд Джейми понимает, что поместила файлы sucrose.dat и maltose.dat не в ту папку. Файлы должны были быть помещены в папку raw.

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

Решение

Напоминаем, что .. относится к родительскому каталогу (т. е. каталогу выше текущего), а . относится к текущему каталогу.

Копирование файлов и каталогов

Команда cp очень похожа на mv, за исключением того, что она копирует файл, а не перемещает его. Мы можем проверить, правильно ли он поступил, используя ls с двумя путями в качестве аргументов — как и большинству команд Unix, ls можно указать сразу несколько путей:

Мы также можем скопировать каталог и все его содержимое, используя рекурсивную опцию -r , например для резервного копирования каталога:

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

Переименование файлов

  1. cp statstics.txt Statistics.txt
  2. mv statstics.txt stats.txt
  3. mv statstics.txt .
  4. cp statstics.txt.

Решение

  1. Нет. Хотя при этом будет создан файл с правильным именем, файл с неправильным именем все еще существует в каталоге, и его необходимо удалить.
  2. Да, переименовать файл можно.
  3. Нет, точка (.) указывает, куда переместить файл, но не дает нового имени файла; одинаковые имена файлов не могут быть созданы.
  4. Нет, точка (.) указывает, куда копировать файл, но не дает нового имени файла; одинаковые имена файлов не могут быть созданы.

Перемещение и копирование

Что выводит закрывающая команда ls в показанной ниже последовательности?

  1. белки-сохраненные.dat рекомбинированы
  2. воссоединено
  3. белки.dat рекомбинированы
  4. proteins-saved.dat

Решение

  1. Нет, см. объяснение выше. .profiles-saved.dat находится в папке /Users/jamie
  2. Да
  3. Нет, см. объяснение выше. .projects.dat находится в папке /Users/jamie/data/recombined
  4. Нет, см. объяснение выше. .profiles-saved.dat находится в папке /Users/jamie

Удаление файлов и каталогов

Возвращаясь к каталогу shell-lesson-data/writing, давайте наведем порядок в этом каталоге, удалив созданный нами файл quotes.txt. Для этого мы будем использовать команду Unix — rm (сокращение от «удалить»):

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

Удаление навсегда

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

Безопасное использование rm

Что происходит, когда мы выполняем команду rm -i thesis_backup/quotations.txt? Зачем нам нужна эта защита при использовании rm ?

Решение

Опция -i будет запрашивать перед (каждым) удалением (используйте Y, чтобы подтвердить удаление, или N, чтобы сохранить файл). Оболочка Unix не имеет корзины для мусора, поэтому все удаленные файлы исчезнут навсегда. С помощью параметра -i у нас есть возможность убедиться, что мы удаляем только те файлы, которые хотим удалить.

Если мы попытаемся удалить каталог тезисов с помощью rm thesis , мы получим сообщение об ошибке:

Это происходит потому, что rm по умолчанию работает только с файлами, а не с каталогами.

rm может удалить каталог и все его содержимое, если мы используем рекурсивную опцию -r , и он сделает это без каких-либо запросов на подтверждение:

Учитывая, что нет возможности восстановить файлы, удаленные с помощью оболочки, rm -r следует использовать с большой осторожностью (можно рассмотреть возможность добавления интерактивной опции rm -r -i ).

Операции с несколькими файлами и каталогами

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

Копировать с несколькими именами файлов

В этом упражнении вы можете протестировать команды в каталоге shell-lesson-data/exercise-data.

В приведенном ниже примере что делает cp, если задано несколько имен файлов и имя каталога?

В приведенном ниже примере что делает cp, если задано три или более имен файлов?

Решение

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

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

Использование подстановочных знаков для одновременного доступа к нескольким файлам

Подстановочные знаки

* — это подстановочный знак, который соответствует нулю или более символов. Давайте рассмотрим каталог shell-lesson-data/exercise-data/proteins: *.pdb соответствует ethan.pdb, propane.pdb и всем файлам, оканчивающимся на «.pdb». С другой стороны, p*.pdb соответствует только pentane.pdb и propane.pdb , потому что «p» в начале соответствует только именам файлов, начинающимся с буквы «p».

? также является подстановочным знаком, но соответствует только одному символу. Таким образом, ?ethan.pdb будет соответствовать метану.pdb, тогда как *ethan.pdb соответствует и ethan.pdb , и метану.pdb .

Подстановочные знаки можно использовать в сочетании друг с другом, например. . ane.pdb соответствует трем символам, за которыми следует ane.pdb , что дает cubane.pdb ethan.pdb octane.pdb .

Когда оболочка видит подстановочный знак, он расширяет подстановочный знак, чтобы создать список совпадающих имен файлов перед выполнением запрошенной команды. В качестве исключения, если выражение с подстановочным знаком не соответствует ни одному файлу, Bash передаст выражение в качестве аргумента команде как есть. Например, ввод ls *.pdf в каталоге белков (который содержит только файлы с именами, заканчивающимися на .pdb ) приводит к сообщению об ошибке, что файл с именем *.pdf отсутствует. Однако обычно такие команды, как wc и ls, видят списки имен файлов, соответствующих этим выражениям, но не сами подстановочные знаки. Именно оболочка, а не другие программы, занимается раскрытием подстановочных знаков.

Список имен файлов, соответствующих шаблону

  1. ls *t*ane.pdb
  2. ls *t?ne.*
  3. ls *t??ne.pdb
  4. этан.*

Решение

Решение 3.

1. показывает все файлы, имена которых содержат ноль или более символов (*), за которыми следует буква t, затем ноль или более символов (*), за которыми следует ane.pdb. Это дает этан.pdb метан.pdb октан.pdb пентан.pdb .

2. показывает все файлы, имена которых начинаются с нуля или более символов ( * ), за которыми следует буква t , затем один символ ( ? ), затем ne. за которым следует ноль или более символов ( * ). Это даст нам octane.pdb и pentane.pdb, но не соответствует ничему, что заканчивается на thane.pdb.

3. устраняет проблемы варианта 2, сопоставляя два символа ( ?? ) между t и ne . Это решение.

4. показывает только файлы, начинающиеся с этана. .

Подробнее о подстановочных знаках

У Сэма есть каталог, содержащий данные калибровки, наборы данных и описания наборов данных:

Прежде чем отправиться на очередную экскурсию, она хочет создать резервную копию своих данных и отправить несколько наборов данных своему коллеге Бобу. Для выполнения работы Сэм использует следующие команды:

Помогите Сэму, заполнив пустые поля.

Полученная структура каталогов должна выглядеть так

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

Команду dir также можно запустить из консоли восстановления Windows с другими параметрами. Дополнительные сведения см. в разделе Среда восстановления Windows (WinRE).

Синтаксис

Параметры

  • d — Каталоги
  • h — Скрытые файлы
  • s — Системные файлы
  • l — Точки повторной обработки
  • r — файлы только для чтения
  • a — Файлы готовы к архивированию
  • i — Файлы, не проиндексированные по содержимому
  • n — в алфавитном порядке по имени
  • e – в алфавитном порядке.
  • g – сначала сгруппировать каталоги
  • s – по размеру, начиная с самого маленького.
  • d — по дате/времени, начиная с самых старых
  • Используйте префикс -, чтобы изменить порядок сортировки
  • c — Создание
  • a — Последнее обращение
  • w – Последнее сообщение

Примечания

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

Вы можете использовать подстановочные знаки (* или ?) для представления одного или нескольких символов имени файла и для отображения подмножества файлов или подкаталогов.

Вы можете использовать подстановочный знак * для замены любой строки символов, например:

dir *.txt перечисляет все файлы в текущем каталоге с расширениями, начинающимися с .txt, например .txt, .txt1, .txt_old.

dir read *.txt перечисляет все файлы в текущем каталоге, имена которых начинаются с read и расширения которых начинаются с .txt, например .txt, .txt1 или .txt_old.

dir read *.* перечисляет все файлы в текущем каталоге, которые начинаются с read с любым расширением.

Подстановочный знак звездочки всегда использует сопоставление коротких имен файлов, поэтому вы можете получить неожиданные результаты. Например, следующий каталог содержит два файла (t.txt2 и t97.txt):

Вы можете ожидать, что при вводе dir t97\* будет возвращен файл t97.txt. Однако если ввести dir t97\*, будут возвращены оба файла, поскольку подстановочный знак звездочки сопоставляет файл t.txt2 с t97.txt, используя его карту коротких имен T97B4~1.TXT. Аналогично, если ввести del t97\*, то оба файла будут удалены.

Можно использовать вопросительный знак (?) вместо одного символа в имени. Например, набрав dir read. txt перечисляет все файлы в текущем каталоге с расширением .txt, которые начинаются с чтения и за которыми следует до трех символов. Сюда входят файлы Read.txt, Read1.txt, Read12.txt, Read123.txt и Readme1.txt, но не файлы Readme12.txt.

Если вы используете /a с более чем одним значением в атрибутах, эта команда отображает имена только тех файлов со всеми указанными атрибутами. Например, если вы используете /a с r и -h в качестве атрибутов (используя либо /a:rh, либо /ar-h ), эта команда отобразит только имена файлов только для чтения, которые не скрыты.< /p>

Если вы укажете более одного значения sortorder, эта команда сортирует имена файлов по первому критерию, затем по второму критерию и так далее. Например, если вы используете /o с параметрами e и -s для порядка сортировки (используя либо /o:es, либо /oe-s ), эта команда сортирует имена каталогов и файлов по расширению. , начиная с наибольшего, а затем отображает окончательный результат. Алфавитная сортировка по расширению приводит к тому, что сначала отображаются имена файлов без расширений, затем имена каталогов, а затем имена файлов с расширениями.

Если вы используете символ перенаправления ( > ) для отправки вывода этой команды в файл или если вы используете канал ( | ) для отправки вывода этой команды другой команде, вы должны использовать /a:-d и /b только список имен файлов. Вы можете использовать имя файла с параметрами /b и /s, чтобы указать, что эта команда предназначена для поиска в текущем каталоге и его подкаталогах всех имен файлов, которые соответствуют имя файла. Эта команда выводит только букву диска, имя каталога, имя файла и расширение имени файла (по одному пути в строке) для каждого найденного имени файла. Прежде чем использовать конвейер для отправки вывода этой команды другой команде, необходимо установить переменную среды TEMP в файле Autoexec.nt.

Примеры

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

В выходных данных перечислены корневой каталог, подкаталоги и файлы в корневом каталоге, включая расширения. Эта команда также выводит список имен подкаталогов и имен файлов в каждом подкаталоге дерева.

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

Чтобы распечатать список каталогов, введите:

Когда вы указываете prn, список каталогов отправляется на принтер, подключенный к порту LPT1. Если ваш принтер подключен к другому порту, вы должны заменить prn именем правильного порта.

Вы также можете перенаправить вывод команды dir в файл, заменив prn именем файла. Вы также можете ввести путь. Например, чтобы направить вывод каталога в файл dir.doc в каталоге Records, введите:

Если каталог dir.doc не существует, каталог dir создает его, если только каталог Records не существует. В этом случае появится следующее сообщение:

Чтобы отобразить список всех имен файлов с расширением .txt во всех каталогах на диске C, введите:

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

Объясните, как оболочка связана с клавиатурой, экраном, операционной системой и пользовательскими программами.

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

Ключевые моменты:

Объясните шаги цикла чтения-выполнения-печати оболочки.

Большинство команд принимают параметры (флаги), которые начинаются с - .

Определите фактическую команду, параметры и имена файлов в вызове командной строки.

Продемонстрируйте использование автодополнения табуляцией и объясните его преимущества.

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

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

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

Фон¶

Люди и компьютеры обычно взаимодействуют разными способами, например с помощью клавиатуры и мыши, интерфейсов с сенсорным экраном или с помощью систем распознавания речи. Наиболее широко используемый способ взаимодействия с персональными компьютерами называется графическим пользовательским интерфейсом (GUI). В графическом интерфейсе мы даем инструкции, щелкая мышью и используя взаимодействие с меню.

Хотя визуальная помощь графического интерфейса делает обучение интуитивно понятным, такой способ передачи инструкций компьютеру очень плохо масштабируется. Представьте себе следующую задачу: для поиска литературы вам нужно скопировать третью строку из тысячи текстовых файлов в тысячу разных каталогов и вставить в один файл. Используя графический интерфейс, вы не только несколько часов щелкаете по своему столу, но и потенциально можете совершить ошибку в процессе выполнения этой повторяющейся задачи. Здесь мы воспользуемся оболочкой Unix. Оболочка Unix является одновременно интерфейсом командной строки (CLI) и языком сценариев, позволяющим выполнять такие повторяющиеся задачи автоматически и быстро. С соответствующими командами оболочка может повторять задачи с некоторыми изменениями или без них столько раз, сколько мы хотим. Используя оболочку, задача из литературного примера может быть выполнена за секунды.

Оболочка:

Оболочка — это программа, в которой пользователи могут вводить команды. С помощью оболочки можно вызывать сложные программы, такие как программное обеспечение для моделирования климата, или простые команды, которые создают пустой каталог с помощью всего одной строки кода. Самой популярной оболочкой Unix является Bash (оболочка Bourne Again SHell, названная так потому, что она произошла от оболочки, написанной Стивеном Борном). Bash является оболочкой по умолчанию в большинстве современных реализаций Unix и в большинстве пакетов, предоставляющих инструменты, подобные Unix, для Windows.

Использование оболочки потребует некоторых усилий и времени на изучение. В то время как графический интерфейс предоставляет вам варианты для выбора, варианты CLI не предоставляются вам автоматически, поэтому вы должны выучить несколько команд, таких как новый словарь на изучаемом языке. Однако, в отличие от разговорного языка, небольшое количество «слов» (т. е. команд) поможет вам пройти долгий путь, и сегодня мы рассмотрим несколько основных.

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

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

Начало работы¶

Открытие оболочки через CyVerse¶

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

Для экземпляра RStudio укажите в качестве входной папки /iplant/home/shared/ag2pi_workshop

Экран входа должен выглядеть следующим образом:

R Console

Для этих уроков мы будем использовать оболочку внутри RStudio.

R Shell

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

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

Итак, давайте попробуем нашу первую команду, ls, сокращенно от listing. Эта команда выведет список содержимого текущего каталога:

Команда не найдена¶

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

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

Вопросы:

Как я могу перемещаться на своем компьютере?

Как узнать, какие у меня есть файлы и каталоги?

Как указать расположение файла или каталога на моем компьютере?

Цели:

Объясните сходства и различия между файлом и каталогом.

Преобразование абсолютного пути в относительный и наоборот.

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

Использование параметров и аргументов для изменения поведения команды оболочки

Продемонстрируйте использование автодополнения табуляцией и объясните его преимущества.

Ключевые моменты:

Файловая система отвечает за управление информацией на диске.

Информация хранится в файлах, которые хранятся в каталогах (папках).

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

cd [путь] изменяет текущий рабочий каталог.

ls [путь] выводит список определенного файла или каталога; ls сам по себе отображает текущий рабочий каталог.

pwd выводит текущий рабочий каталог пользователя.

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

Относительный путь указывает местоположение, начинающееся с текущего местоположения.

Абсолютный путь указывает путь от корня файловой системы.

Имена каталогов в пути разделяются знаком / в Unix и символом \\ в Windows.

.. означает «каталог над текущим»; . сам по себе означает «текущий каталог».

Файловая система¶

Часть операционной системы, отвечающая за управление файлами и каталогами, называется файловой системой. Он организует наши данные в файлы, которые содержат информацию, и каталоги (также называемые «папками»), в которых хранятся файлы или другие каталоги.

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

Вариант домашнего каталога¶

Путь к домашнему каталогу будет выглядеть по-разному в разных операционных системах. В Linux это может выглядеть как /home/nelle , а в Windows это будет похоже на C:\Documents and Settings\nelle или C:\Users\nelle . (Обратите внимание, что он может немного отличаться для разных версий Windows.) В будущих примерах мы использовали выходные данные Mac по умолчанию — выходные данные Linux и Windows могут немного отличаться, но в целом должны быть похожими.

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

В приложении CyVerse файловая система довольно сложная.

Пример диаграммы файловой системы может выглядеть следующим образом:

Пример файловой системы

Сверху находится корневой каталог, в котором хранится все остальное. Мы обращаемся к нему, используя символ косой черты, / , сам по себе; это первая косая черта в /home/rstudio .

Внутри этого каталога есть несколько других каталогов: bin (где хранятся некоторые встроенные программы), data (для различных файлов данных), Users (где расположены личные каталоги пользователей), tmp (для временных файлов, которые не нужно хранить в течение длительного времени) и т. д.

Мы знаем, что наш текущий рабочий каталог /home/rstudio хранится внутри /home, потому что /home — это первая часть его имени. Точно так же мы знаем, что /home хранится в корневом каталоге /, потому что его имя начинается с / .

Слеши¶

Обратите внимание, что у символа / есть два значения.Когда он появляется перед именем файла или каталога, он относится к корневому каталогу. Когда он появляется внутри пути, это просто разделитель.

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

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

знак / указывает, что это каталог

@ указывает на ссылку

* указывает на исполняемый файл

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

Очистка терминала¶

Если ваш экран слишком загроможден, вы можете очистить свой терминал с помощью команды очистки. Вы по-прежнему можете получить доступ к предыдущим командам, используя ↑ и ↓ для перемещения построчно или прокручивая в своем терминале.

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

Общий синтаксис команды оболочки¶

Рассмотрите приведенную ниже команду как общий пример команды, которую мы разберем на составные части:

ls — это команда с параметром -F и аргументом / . Мы уже сталкивались с параметрами (также называемыми переключателями или флагами), которые начинаются либо с одного тире (-), либо с двух тире (-), и они изменяют поведение команды. Аргументы сообщают команде, над чем работать (например, с файлами и каталогами). Иногда опции и аргументы называются параметрами. Команду можно вызвать с более чем одним параметром и более чем одним аргументом, но команда не всегда требует аргумента или параметра.

Каждая часть разделена пробелами: если вы опустите пробел между ls и -F, оболочка будет искать несуществующую команду ls-F . Кроме того, капитализация может быть важна. Например, ls -s отобразит размер файлов и каталогов рядом с именами, а ls -S отсортирует файлы и каталоги по размеру, как показано ниже:

Собрав все это вместе, наша команда выше дает нам список файлов и каталогов в корневом каталоге / . Пример вывода, который вы можете получить из приложения RStudio на CyVerse с помощью приведенной выше команды, приведен ниже:

Помощь¶

ls имеет много других опций. Существует два распространенных способа узнать, как использовать команду и какие параметры она принимает:

Команде можно передать параметр --help, например: .. code-block:

Мы можем прочитать его руководство с помощью man , например: .. code-block:

В зависимости от вашей среды вы можете обнаружить, что работает только один из этих вариантов (либо ``man``, либо ``–help``, например, ``man`` работает для macOS, а ``–help`` обычно работает для Git Bash).

Ниже мы опишем оба способа.

Опция --help¶

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

Неподдерживаемые параметры командной строки¶

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

Команда man¶

man — это сокращение от manual, которое откроет руководство по unix в окне терминала.

Итак, еще один способ узнать о ls — ввести

Это превратит ваш терминал в страницу с описанием команды ls и ее параметров.

Чтобы перемещаться по справочным страницам, вы можете использовать ↑ и ↓ для перемещения построчно, или попробуйте B и пробел``Пробел для перехода вверх и вниз на целую страницу. Чтобы найти символ или слово на страницах `man`, используйте ``/, за которым следует символ или слово, которое вы ищете. Иногда поиск приводит к нескольким совпадениям. Если это так, вы можете перемещаться между ударами, используя N (для перемещения вперед) и Shift + N (для перемещения назад).

Чтобы выйти из справочных страниц, нажмите Q .

Руководства в Интернете¶

Конечно, есть и третий способ доступа к справке по командам: поиск в Интернете через веб-браузер. При использовании поиска в Интернете включение фразы unix man page в ваш поисковый запрос поможет найти релевантные результаты.

GNU предоставляет ссылки на свои руководства, включая основные утилиты GNU, которые охватывают многие команды, представленные в этом уроке.

Изучение дополнительных флагов ls¶

Вы также можете использовать два параметра одновременно. Что делает команда ls при использовании с параметром -l? А если вы используете как параметр -l, так и параметр -h?

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

Опция -l заставляет ls использовать формат длинного списка, показывающий не только имена файлов/каталогов, но и дополнительную информацию, такую ​​как размер файла и время его последней модификации. Если вы используете как параметр -h, так и параметр -l, это делает размер файла «удобочитаемым», т. е. отображает что-то вроде 5,3 КБ вместо 5369 .

Список в обратном хронологическом порядке¶

По умолчанию ls отображает содержимое каталога в алфавитном порядке по имени. Команда ls -t перечисляет элементы по времени последнего изменения, а не по алфавиту. Команда ls -r выводит содержимое каталога в обратном порядке. Какой файл отображается последним при объединении флагов -t и -r? Подсказка: вам может понадобиться использовать флаг -l, чтобы увидеть последние измененные даты.

Самый последний измененный файл отображается последним при использовании -rt . Это может быть очень полезно для поиска ваших последних правок или проверки того, был ли записан новый выходной файл.

Изучение других каталогов¶

Мы можем использовать ls не только для текущего рабочего каталога, но и для просмотра содержимого другого каталога. Давайте взглянем на наш каталог ag2pi_workshop, запустив ls -F input/ag2pi_workshop, то есть команду ls с параметром -F и аргументом input/ag2pi_workshop. Аргумент input/ag2pi_workshop сообщает ls, что нам нужен список чего-то другого, кроме нашего текущего рабочего каталога:

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

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

Теперь, когда мы знаем, что каталог ag2pi_workshop находится в нашем входном каталоге, мы можем сделать две вещи.

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

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

Команда для изменения местоположения — это cd, за которой следует имя каталога, чтобы изменить наш рабочий каталог. cd означает «изменить каталог», что немного вводит в заблуждение: команда не меняет каталог, она изменяет представление оболочки о том, в каком каталоге мы находимся. Команда cd похожа на двойной щелчок по папке в графическом интерфейсе, чтобы попасть в папку.

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