Programming txt

Обучение: 30 мин
Упражнения: 20 мин

Вопросы

  • Как я могу создавать. Копировать и удалять файлы и каталоги?
  • Как я могу редактировать файлы?
Цели

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

  • Удаление, копирование и перемещение указанных файлов и/или каталогов.

Создание каталогов

Теперь мы знаем. Как исследовать файлы и каталоги. Но как мы создаем их в первую очередь?

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

Давайте вернемся к нашему data-shellкаталогу на рабочем столе и ls -Fпосмотрим. Что он содержит:

/Users/nelle/Desktop/data-shell 
creatures/ data/ molecules/ north-pacific-gyre/ notes.txt pizza.cfg solar.pdf writing/ 

Создание каталога

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

$ mkdir thesis 

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

creatures/ data/ molecules/ north-pacific-gyre/ notes.txt pizza.cfg solar.pdf thesis/ writing/ 

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

$ ls -F thesis 

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

$ mkdir -p thesis/chapter_1/section_1/subsection_1 

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

thesisкаталогом:

$ ls -FR thesis chapter_1/ thesis/chapter_1: section_1/ thesis/chapter_1/section_1: subsection_1/ thesis/chapter_1/section_1/subsection_1: 

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

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

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

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

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

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

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

    Команды обрабатывают имена. Начинающиеся с

    -as options.

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

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

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

Создание текстового файла

Давайте изменим наш рабочий каталог на

thesisusing cd, а затем запустим текстовый редактор Nano. Чтобы создать файл под названиемdraft.txt:

$ cd thesis $ nano draft.txt 

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

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

Gedit. В Windows вы можете использовать Notepad++ В Windows также есть встроенный редактор, notepadкоторый можно запустить из командной строки так же. Как nanoи в этом уроке .

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

Давайте наберем несколько строк текста. Как только мы будем довольны нашим текстом. Мы можем нажать

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

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

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

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

Клавиша управления также называется клавишей Существуют различные способы использования управляющего ключа. Например, вы можете увидеть инструкцию нажать Controlклавишу и. Удерживая ее нажатой. Нажать Xклавишу. Описанную как любая из:

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

В nano, в нижней части экрана вы увидите ^G Get Help ^O WriteOut. Это означает. Что вы можете использовать Control-Gего для получения справки и Control-Oсохранения вашего файла.

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

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

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

$ touch my_file.txt 
  1. Что сделала touchкоманда? Когда вы смотрите на свой текущий каталог с помощью GUI file explorer. Отображается ли файл?

  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. Некоторые программы сами не генерируют выходные файлы. А вместо этого требуют. Чтобы пустые файлы уже были сгенерированы. Когда программа запускается. Она ищет существующий файл для заполнения его выводом. Сенсорная команда позволяет эффективно генерировать пустой текстовый файл для использования такими программами.

Что В Имени?

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

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

Называя PNG-изображение кита какwhale.mp3-то магически не превращает его в запись песни кита. Хотя это может привести к тому. Что операционная система попытается открыть его с помощью музыкального проигрывателя. Когда кто-то дважды щелкнет по нему.

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

Возвращение в data-shellкаталог,

cd ~/Desktop/data-shell/ 

В нашем thesisкаталоге у нас есть файлdraft.txt это не особенно информативное имя. Поэтому давайте изменим имя файла с помощью mv, которое является сокращением от

$ mv thesis/draft.txt thesis/quotes.txt 

Первый аргумент говорит mvо том. Что мы В этом случае мы переходим thesis/draft.txtкthesis/quotes.txt, что имеет тот же эффект . Что и переименование файла. Конечно же, lsпоказывает нам. Что thesisтеперь содержит один файл под названиемquotes.txt:

$ ls thesis 
quotes.txt 

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

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

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

$ mv thesis/quotes.txt . 

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

$ ls thesis 

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

$ ls quotes.txt 
quotes.txt 

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

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

$ ls -F analyzed/ raw/ $ ls -F analyzed fructose.dat glucose.dat maltose.dat sucrose.dat $ cd analyzed 

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

$ mv sucrose.dat maltose.dat ____/____ 

Решение

$ mv sucrose.dat maltose.dat ../raw 

Напомним. Что ..это относится к родительскому каталогу (то есть к тому. Который находится над текущим каталогом) . А это .относится к текущему каталогу.

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

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

$ cp quotes.txt thesis/quotations.txt $ ls quotes.txt thesis/quotations.txt 
quotes.txt thesis/quotations.txt 

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

$ cp -r thesis thesis_backup 

Мы можем проверить результат. Перечислив содержимое обоих каталогов thesisиthesis_backup:

$ ls thesis thesis_backup 
thesis: quotations.txt thesis_backup: quotations.txt 

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

Предположим. Что вы создали простой текстовый файл в вашем текущем каталоге. Содержащий список статистических тестов. Которые вам нужно будет выполнить для анализа ваших данных. И назвали его: statstics.txt

После создания и сохранения этого файла вы понимаете. Что неправильно написали имя файла! Вы хотите исправить ошибку. Какую из следующих команд вы могли бы использовать для этого?

  1. cp statstics.txt statistics.txt
  2. mv statstics.txt statistics.txt
  3. mv statstics.txt .
  4. cp statstics.txt .

Решение

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

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

Каков вывод команды закрытия lsв последовательности. Показанной ниже?

/Users/jamie/data 
proteins.dat 
$ mkdir recombined $ mv proteins.dat recombined/ $ cp recombined/proteins.dat ../proteins-saved.dat $ ls 
  1. proteins-saved.dat recombined
  2. recombined
  3. proteins.dat recombined
  4. proteins-saved.dat

Решение

Мы начинаем с /Users/jamie/dataкаталога и создаем новую папку под названием recombined. Вторая строка перемещает (mv) файл proteins.datв новую папку (recombined). Третья строка делает копию файла. Который мы только что переместили. Хитрая часть здесь заключается в том. Куда был скопирован файл. Напомним. Что ..это означает /Users/jamie. Обратите внимание. Что ..интерпретируется по отношению к текущему рабочему каталогу, а не по отношению к местоположению копируемого файла. Таким образом. Единственное. Что будет отображаться с помощью ls (in/Users/jamie/data), — это папка recombined.

  1. Нет, смотрите объяснение выше. proteins-saved.dat находится по адресу: /Users/jamie
  2. ДА
  3. Нет, см. Объяснение выше. proteins.dat находится по адресу: /Users/jamie/data/recombined
  4. Нет, смотрите объяснение выше. proteins-saved.dat находится по адресу /Users/jamie

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

Возвращаясь к data-shellкаталогу. Давайте приведем его в порядок. Удалив quotes.txtсозданный нами файл. Команда Unix. Которую мы будем использовать для этого. Называется rm(сокращенно

$ rm quotes.txt 

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

$ ls quotes.txt 
ls: cannot access 'quotes.txt': No such file or directory 

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

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

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

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

Решение

$ rm: remove regular file 'thesis_backup/quotations.txt'? y 

Эта -iопция будет запрашивать перед (каждым) удалением (используется Yдля подтверждения удаления или Nсохранения файла). В оболочке Unix нет мусорной корзины. Поэтому все удаленные файлы исчезнут навсегда. Используя эту -iопцию. Мы имеем возможность проверить. Что удаляем только те файлы. Которые хотим удалить.

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

$ rm thesis 
rm: cannot remove `thesis': Is a directory 

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

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

$ rm -r thesis 

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

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

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

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

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

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

$ mkdir backup $ cp amino-acids.txt animals.txt backup/ 

В приведенном ниже примере. Что cpпроисходит. Когда дается три или более имен файлов?

amino-acids.txt animals.txt backup/ elements/ morse.txt pdb/ planets.txt salmon.txt sunspot.txt 
$ cp amino-acids.txt animals.txt morse.txt 

Решение

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

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

cp: target ‘morse.txt’ is not a directory 

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

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

* подстановочныйзнак . Который соответствует нулю или более символов. Рассмотрим data-shell/moleculesкаталог: *.pdbmatches ethane.pdb, propane.pdb, и каждый файл. Который заканчивается на ‘.pdb’. С другой стороны, p*.pdbтолько совпадения pentane.pdbи propane.pdb, потому что

? это тоже подстановочный знак. Но он соответствует ровно одному символу. Так ?ethane.pdbбы совпало methane.pdb, тогда *ethane.pdbкак совпадает и ethane.pdbто, и methane.pdbдругое .

Подстановочные знаки могут использоваться в сочетании друг с другом . Например???ane.pdb, соответствует трем символам. За которыми следуетane.pdb, давая cubane.pdb ethane.pdb octane.pdb.

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

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

При запуске в moleculesкаталоге какая lsкоманда(ы) будет производить этот вывод?

ethane.pdb methane.pdb

  1. ls *t*ane.pdb
  2. ls *t?ne.*
  3. ls *t??ne.pdb
  4. ls ethane.*

Решение

Решение заключается в 3.

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

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

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

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

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

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

. ├── 2015-10-23-calibration.txt ├── 2015-10-23-dataset1.txt ├── 2015-10-23-dataset2.txt ├── 2015-10-23-dataset_overview.txt ├── 2015-10-26-calibration.txt ├── 2015-10-26-dataset1.txt ├── 2015-10-26-dataset2.txt ├── 2015-10-26-dataset_overview.txt ├── 2015-11-23-calibration.txt ├── 2015-11-23-dataset1.txt ├── 2015-11-23-dataset2.txt ├── 2015-11-23-dataset_overview.txt ├── backup │   ├── calibration │   └── datasets └── send_to_bob ├── all_datasets_created_on_a_23rd └── all_november_files 

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

$ cp *dataset* backup/datasets $ cp ____calibration____ backup/calibration $ cp 2015-____-____ send_to_bob/all_november_files/ $ cp ____ send_to_bob/all_datasets_created_on_a_23rd/ 

Помогите Сэму. Заполнив пробелы.

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

. ├── 2015-10-23-calibration.txt ├── 2015-10-23-dataset1.txt ├── 2015-10-23-dataset2.txt ├── 2015-10-23-dataset_overview.txt ├── 2015-10-26-calibration.txt ├── 2015-10-26-dataset1.txt ├── 2015-10-26-dataset2.txt ├── 2015-10-26-dataset_overview.txt ├── 2015-11-23-calibration.txt ├── 2015-11-23-dataset1.txt ├── 2015-11-23-dataset2.txt ├── 2015-11-23-dataset_overview.txt ├── backup │   ├── calibration │   │   ├── 2015-10-23-calibration.txt │   │   ├── 2015-10-26-calibration.txt │   │   └── 2015-11-23-calibration.txt │   └── datasets │   ├── 2015-10-23-dataset1.txt │   ├── 2015-10-23-dataset2.txt │   ├── 2015-10-23-dataset_overview.txt │   ├── 2015-10-26-dataset1.txt │   ├── 2015-10-26-dataset2.txt │   ├── 2015-10-26-dataset_overview.txt │   ├── 2015-11-23-dataset1.txt │   ├── 2015-11-23-dataset2.txt │   └── 2015-11-23-dataset_overview.txt └── send_to_bob ├── all_datasets_created_on_a_23rd │   ├── 2015-10-23-dataset1.txt │   ├── 2015-10-23-dataset2.txt │   ├── 2015-10-23-dataset_overview.txt │   ├── 2015-11-23-dataset1.txt │   ├── 2015-11-23-dataset2.txt │   └── 2015-11-23-dataset_overview.txt └── all_november_files ├── 2015-11-23-calibration.txt ├── 2015-11-23-dataset1.txt ├── 2015-11-23-dataset2.txt └── 2015-11-23-dataset_overview.txt 

Решение

$ cp *calibration.txt backup/calibration $ cp 2015-11-* send_to_bob/all_november_files/ $ cp *-23-dataset* send_to_bob/all_datasets_created_on_a_23rd/ 

Организация каталогов и файлов

Джейми работает над проектом и она видит. Что ее файлы не очень хорошо организованы:

analyzed/ fructose.dat raw/ sucrose.dat 

Файлы fructose.datи sucrose.datсодержат результаты ее анализа данных. Какие команды. Описанные в этом уроке. Ей нужно выполнить. Чтобы приведенные ниже команды произвели показанный результат?

analyzed/ raw/ 
$ ls analyzed 
fructose.dat sucrose.dat 

Решение

mv *.dat analyzed 

Джейми нужно переместить ее файлы fructose.datsucrose.datв analyzedкаталог. Оболочка расширит *.dat. Чтобы соответствовать всем .файлы dat в текущем каталоге. Затем mvкоманда перемещает список файлов .dat в каталог

Воспроизведение структуры папок

Вы начинаете новый эксперимент и хотите скопировать структуру каталогов из предыдущего эксперимента. Чтобы добавить новые данные.

Предположим. Что предыдущий эксперимент находится в папке с именем dataпапку, которая. В свою очередь. Содержит папки с именами rawи processedфайлы данных. Цель состоит в том. Чтобы скопировать структуру папок 2016-05-18-dataпапки в папку с именем 2016-05-20так, чтобы ваша конечная структура каталогов выглядела следующим образом:

2016-05-20/ └── data ├── processed └── raw 

Какой из следующих наборов команд достигнет этой цели? Что будут делать другие команды?

$ mkdir 2016-05-20 $ mkdir 2016-05-20/data $ mkdir 2016-05-20/data/processed $ mkdir 2016-05-20/data/raw 
$ mkdir 2016-05-20 $ cd 2016-05-20 $ mkdir data $ cd data $ mkdir raw processed 
$ mkdir 2016-05-20/data/raw $ mkdir 2016-05-20/data/processed 
$ mkdir -p 2016-05-20/data/raw $ mkdir -p 2016-05-20/data/processed 
$ mkdir 2016-05-20 $ cd 2016-05-20 $ mkdir data $ mkdir raw processed 

Решение

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

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

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

Последний набор команд генерирует каталоги

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

  • cp [old] [new] копирует файл.

  • mkdir [path] создает новый каталог.

  • mv [old] [new] перемещает (переименовывает) файл или каталог.

  • rm [path] удаляет (удаляет) файл.

  • * соответствует нулю или более символов в имени файла. Поэтому *.txtсоответствует всем файлам. Заканчивающимся на .txt.

  • ? соответствует любому отдельному символу в имени файла. Поэтому ?.txtсоответствуетa.txt, но не any.txtсоответствует .

  • Использование управляющего ключа может быть описано многими способами. ВключаяCtrl-X,Control-X, и ^X.

  • У оболочки нет мусорной корзины: как только что-то удаляется. Оно действительно исчезает.

  • Имена большинства файлов something.extensionтакие . Расширение не требуется и ничего не гарантирует. Но обычно используется для указания типа данных в файле.

  • В зависимости от типа выполняемой работы вам может понадобиться более мощный текстовый редактор, чем Nano.