Робота з файлами та каталогами

Останнє оновлення 2025-08-28 | Редагувати цю сторінку

Огляд

Питання

  • Як я можу створювати, копіювати та видаляти файли і каталоги?
  • Як я можу редагувати файли?

Цілі

  • Створити ієрархію каталогів, яка відповідає заданій схемі.
  • Створити файли в цій ієрархії за допомогою редактора або шляхом копіювання та перейменування файлів, що вже існують.
  • Видалити, скопіювати та перемістити вказані файли та/або каталоги.

Створення каталогів


Тепер ми знаємо, як досліджувати файли та каталоги, але як їх створювати?

У цьому уроці ми дізнаємося про створення та переміщення файлів і каталогів на прикладі каталогу exercise-data/writing.

Крок перший: подивимось, де ми знаходимося і що вже маємо

Ми все ще маємо бути у каталозі shell-lesson-data на Робочому столі (англ. Desktop), що ми можемо перевірити за допомогою:

BASH

$ pwd

ВИХІД

/Users/nelle/Desktop/shell-lesson-data

Далі ми перейдемо до каталогу exercise-data/writing і подивимося, що у ньому міститься:

BASH

$ cd exercise-data/writing/
$ ls -F

ВИХІД

haiku.txt LittleWomen.txt

Створення каталогу

Створимо новий каталог з назвою thesis за допомогою команди mkdir thesis (яка не має виводу):

BASH

$ mkdir thesis

Як ви можете здогадатися з її назви, команда mkdir означає ‘створити каталог’ (англ. ‘make directory’). Оскільки thesis є відносним шляхом (тобто не має початкової косої риски, як /what/ever/thesis), новий каталог буде створено у поточному робочому каталозі:

BASH

$ ls -F

ВИХІД

haiku.txt  LittleWomen.txt  thesis/

Оскільки ми щойно створили каталог thesis, у ньому ще нічого немає:

BASH

$ ls -F thesis

Зауважте, що команда mkdir не тільки створює окремі каталоги по одному за раз. Параметр -p дозволяє команді mkdir створювати каталог із вкладеними підкаталогами за одну операцію:

BASH

$ mkdir -p ../project/data ../project/results

Параметр -R з командою ls покаже усі вкладені підкаталоги у каталозі. Скористаймось ls -FR для рекурсивного зображення нової ієрархії каталогів, яку ми щойно створили у каталозі project:

BASH

$ ls -FR ../project

ВИХІД

../project/:
data/  results/

../project/data:

../project/results:
Виноска

Два способи зробити одне й те саме

Використання терміналу для створення каталогу нічим не відрізняється від використання файлового провідника. Якщо ви зараз відкриєте поточний каталог за допомогою графічного провідника файлів вашої операційної системи, там також з’явиться каталог thesis. Хоча термінал і файловий провідник - це два різні способи взаємодії з файлами, самі файли й каталоги одні й ті ж самі.

Виноска

Доречні імена для файлів і каталогів

Використання надто складних імен для файлів і каталогів може ускладнити роботу в командному рядку. Ось кілька корисних порад щодо вибору ефективних імен.

  1. Не використовуйте пробіли.

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

  1. Не починайте назву з - (тире).

Команди розглядають назви, що починаються з -, як опції.

  1. Використовуйте літери, цифри, . (крапку), - (тире) і _ (підкреслення).

Багато інших символів мають особливе значення у командному рядку. Деякі з них ми розглянемо у цьому уроці. Існують спеціальні символи, які можуть спричинити неправильну роботу команди й навіть призвести до втрати даних.

Якщо вам потрібно звернутися до назв файлів або каталогів, які містять пробіли чи інші спеціальні символи, вам слід узяти назву в одинарні лапки ('').

Створення текстового файлу

Перейдімо до каталогу thesis за допомогою cd, а потім запустимо текстовий редактор Nano та створимо файл з назвою draft.txt:

BASH

$ cd thesis
$ nano draft.txt
Виноска

Який редактор використовувати?

Коли ми говоримо, що ‘nano - це текстовий редактор’, ми дійсно маємо на увазі ‘текстовий’. У ньому неможливо переглядати або редагувати таблиці, зображення чи будь-які інші зручні для сприйняття людиною дані. Ми використовуємо його у прикладах, оскільки це один із найпростіших текстових редакторів. Однак, через це він може виявитися недостатньо потужним або гнучким для складніших завдань, які вам потрібно буде виконати після завершення цього семінару. У системах Unix (таких як Linux та macOS), багато програмістів використовують [Emacs] (https://www.gnu.org/software/emacs/) чи Vim (обидва вимагають більше часу на вивчення), або графічний редактор, такий як Gedit чи VScode. У Windows, можливо, ви захочете скористатися Notepad++. Операційна система Windows також має вбудований редактор з назвою notepad, який можна запустити з командного рядка так само, як і nano для цього семінару.

Незалежно від того, яким редактором ви користуєтеся, вам потрібно знати, де він шукає і зберігає файли. Якщо ви запускаєте його з термінала, він (імовірно) використовуватиме ваш поточний робочий каталог як розташування за замовчуванням. Однак, якщо ви використовуєте меню “Пуск” вашого комп’ютера, файли за замовчуванням можуть зберігатися замість цього на робочому столі або в каталозі “Документи” (Documents). Ви можете змінити це, перейшовши до іншого каталогу під час першого виконання команди “Зберегти як…” (“Save As…”).

Наберемо кілька рядків тексту.

{alt=“Скриншот текстового редактора nano в дії з текстом”У минулому це було - публікуй чи зникни, а наразі стало - ділися та процвітай”}

Як тільки ми будемо задоволені нашим текстом, нам треба використати комбінацію Ctrl+O (утримуючи клавішу Ctrl or Control, натисніть клавішу O), щоб зберегти наші дані на диск. Потім нам буде запропоновано вказати ім’я файлу, у якому зберігатиметься наш текст. Натисніть Return, щоб прийняти запропоновану за замовчуванням назву draft.txt.

Як тільки файл було збережено, скористаємось комбінацією клавіш Ctrl+X, щоб вийти з редактора і повернутися до термінала.

Виноска

Клавіша Control, Ctrl або ^

Клавіші Control також називається клавішею ‘Ctrl’. Існує декілька способів, якими може бути описане використання клавіші Control. Наприклад, ви можете побачити вказівку натиснути клавішу 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:

BASH

$ ls

ВИХІД

draft.txt
Вправа

Створення файлів іншим способом

Ми побачили, як створювати текстові файли за допомогою редактора nano. Тепер спробуйте виконати наступну команду:

BASH

$ touch my_file.txt
  1. Що зробила команда touch? Якщо ви відкриєте поточний каталог у файловому провіднику, чи видно в ньому цей файл?

  2. Скористуйтеся ls -l для перегляду файлів. Який розмір має файл my_file.txt?

  3. У яких випадках доцільно створювати файл саме таким чином?

  1. Команда touch створює новий файл з назвою my_file.txt у вашому поточному каталозі. Щоб переконатися, що файл створено, скористайтеся командою ls. Файл my_file.txt також можна переглянути у вашому графічному провіднику файлів.

  2. Коли ви перевіряєте файл за допомогою ls -l, зверніть увагу, що розмір my_file.txt — 0 байт. Це означає, що файл порожній. Якщо відкрити його в редакторі, ви не знайдете в ньому жодного вмісту.

  3. Іноді програми не генерують вихідні файли автоматично, а потребують, щоб порожні файли були створені заздалегідь. Потім під час виконання програма шукає наявний файл, щоб заповнити його своїми даними. За допомогою команди touch можна ефективно створити порожній текстовий файл для подальшого використання такими програмами.

Обговорення

Створення файлів іншим способом (continued)

Щоб уникнути плутанини пізніше, радимо видалити створений файл перед продовженням епізоду, інакше майбутні результати можуть відрізнятися від наведених в уроці. Для цього скористайтеся наступною командою:

BASH

$ rm my_file.txt
Виноска

Що ховається в імені?

Ви, мабуть, помітили, що всі файли Неллі називаються ‘щось крапка щось’, і у цій частині уроку ми завжди використовували розширення .txt. Це лише умовність: ми можемо назвати файл mythesis або майже як завгодно. Однак, більшість людей здебільшого використовують назви, що складаються з двох частин для того, щоб допомогти їм (і їхнім програмам) розрізняти різні типи файлів. Друга частина такого імені називається розширенням файлу і вказує тип даних у файлі: .txt вказує на простий текстовий файл, .pdf вказує на PDF-документ, .cfg - це конфігураційний файл з параметрами для тієї чи іншої програми, .png - зображення у форматі PNG, і так далі.

Це лише умовність, хоча й важлива. Файли містять лише байти: це ми та наші програми будемо їх відповідно інтерпретувати — як текст, PDF-документи, конфігураційні файли, зображення тощо.

Якщо ви назвете зображення кита у форматі PNG як whale.mp3, це не перетворить його якимось чарівним чином на запис пісні кита, хоча це може змусити операційну систему спробувати відкрити його за допомогою музичного плеєра. У цьому випадку, якщо хтось двічі клацне на файлі whale.mp3 у файловому провіднику, музичний програвач автоматично (і помилково) спробує відкрити файл whale.mp3.

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


Повернемося до каталогу shell-lesson-data/exercise-data/writing:

BASH

$ cd ~/Desktop/shell-lesson-data/exercise-data/writing

У нашому каталозі thesis є файл draft.txt, з не надто інформативною назвою, тому змінімо назву файлу за допомогою команди mv, що є скороченням від ‘move’ (з англ. - ‘переміщати’):

BASH

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

Перший аргумент говорить mv, що ми “переміщаємо”, а другий - куди саме. У цьому випадку ми переміщуємо thesis/draft.txt до thesis/quotes.txt, що має той самий ефект, що і перейменування файлу. Після цього ls підтверджує, що thesis тепер містить один файл з назвою quotes.txt:

BASH

$ ls thesis

ВИХІД

quotes.txt

Слід бути обережним, вказуючи ім’я цільового файлу, оскільки mv приховано перезапише будь-який наявний файл з такою самою назвою, а це може призвести до втрати даних. За замовчуванням mv не запитуватиме підтвердження перед перезаписом файлів. Однак додатковий параметр mv -i (або mv --interactive) змусить mv запросити таке підтвердження.

Зверніть увагу, що mv також працює з каталогами.

Перемістимо quotes.txt до поточного робочого каталогу. Знову скористаємося mv, але цього разу ми використаємо лише назву каталогу як другий аргумент щоб повідомити mv, що ми хочемо зберегти назву файлу, але перемістити файл у нове місце. (Ось чому команда називається ‘перемістити’.) У цьому випадку ми використовуємо спеціальну назву . поточного каталогу, про яку ми згадували раніше.

BASH

$ mv thesis/quotes.txt .

Наслідком цього буде переміщення файлу з початкового каталогу до поточного робочого каталогу. Тепер ls показує нам, що каталог thesis` порожній:

BASH

$ ls thesis

ВИХІД

$

Крім того, ми можемо переконатися, що файл quotes.txt більше не присутній у каталозі thesis, спробувавши показати інформацію про нього:

BASH

$ ls thesis/quotes.txt

ПОМИЛКА

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

Команда ls, якщо вказати ім’я файлу або каталогу як аргумент, виводить лише список запитуваних файлів або каталогів. Якщо вказаного файлу не існує, термінал поверне помилку — як ми вже бачили раніше. Таким чином ми можемо перевірити, що файл quotes.txt тепер знаходиться у поточному каталозі:

BASH

$ ls quotes.txt

ВИХІД

quotes.txt
Вправа

Переміщення файлів до нового каталогу

Після виконання наступних команд Джеймі зрозуміла, що помістила файли sucrose.dat та maltose.dat не до того каталогу. Файли потрібно було помістити у каталог raw.

BASH

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

Заповніть пропуски, щоб перемістити ці файли до каталогу raw/ (тобто туди, куди вона забула їх помістити)

BASH

$ mv sucrose.dat maltose.dat ____/____

BASH

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

Пам’ятайте, що .. вказує на батьківський каталог (тобто на каталог рівнем вище поточного), а . вказує на поточний каталог.

Копіювання файлів і каталогів


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

BASH

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

ВИХІД

quotes.txt   thesis/quotations.txt

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

BASH

$ cp -r thesis thesis_backup

Ми можемо перевірити результат, переглянувши вміст каталогів thesis та thesis_backup:

BASH

$ ls thesis thesis_backup

ВИХІД

thesis:
quotations.txt

thesis_backup:
quotations.txt

Важливо додати опцію -r. Якщо ви хочете скопіювати каталог і не вкажете цей параметр ви побачите повідомлення про те, що каталог було пропущено, оскільки -r не вказано.

BASH

$ cp thesis thesis_backup
cp: -r not specified; omitting directory 'thesis'
Вправа

Перейменування файлів

Припустімо, що ви створили у поточному каталозі простий текстовий файл, який містить список статистичних тестів, які вам знадобляться для аналізу ваших даних, і назвали його 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 у наведеній нижче послідовності?

BASH

$ pwd

ВИХІД

/Users/jamie/data

BASH

$ ls

ВИХІД

proteins.dat

BASH

$ 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 (у каталозі /Users/jamie/data) - це каталог recombined.

  1. Ні, див. пояснення вище. Каталог proteins-saved.dat розташовано у каталозі /Users/jamie
  2. Так
  3. Ні, див. пояснення вище. Файл proteins.dat знаходиться в каталозі /Users/jamie/data/recombined
  4. Ні, див. пояснення вище. Файл proteins-saved.dat знаходиться в каталозі /Users/jamie

Видалення файлів і каталогів


Повертаючись до каталогу shell-lesson-data/exercise-data/writing, давайте почистимо цей каталог, видаливши створений нами файл quotes.txt. Для цього ми скористаємося командою Unix rm (скорочення від англ. remove - видаляти):

BASH

$ rm quotes.txt

Ми можемо перевірити видалення файлу за допомогою ls:

BASH

$ 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, ми отримаємо повідомлення про помилку:

BASH

$ rm thesis

ПОМИЛКА

rm: cannot remove `thesis': Is a directory

Це відбувається тому, що команда rm за замовчуванням працює лише з файлами, а не з каталогами.

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

BASH

$ rm -r thesis

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

Операції з декількома файлами та каталогами


Час від часу нам знадобиться скопіювати або перемістити кілька файлів одночасно. Для цього треба надати список імен окремих файлів, або вказати шаблон імен за допомогою символів підстановки. Це символи, які можна використовувати для представлення невідомих символів або груп символів під час навігації по файловій системі Unix.

Вправа

Копіювання кількох файлів водночас

Для цієї вправи ви можете випробувати команди у каталозі shell-lesson-data/exercise-data.

Що робить команда cp у наведеному нижче прикладі, коли їй надано декілька імен файлів і назву каталогу?

BASH

$ mkdir backup
$ cp creatures/minotaur.dat creatures/unicorn.dat backup/

Що робить команда cp у наведеному нижче прикладі, коли їй задано три або більше імен файлів?

BASH

$ cd creatures
$ ls -F

ВИХІД

basilisk.dat  minotaur.dat  unicorn.dat

BASH

$ cp minotaur.dat unicorn.dat basilisk.dat

Якщо надано декілька імен файлів та ім’я каталогу (каталог призначення має бути останнім аргументом), команда cp копіює файли до вказаного каталогу.

Якщо надано тільки три імені файлів, то cp видасть помилку, подібну до наведеної нижче, бо останній аргумент повинен бути ім’ям каталогу.

ПОМИЛКА

cp: target 'basilisk.dat' is not a directory

Використання символів підстановки для роботи з кількома файлами одночасно

Виноска

Символи підстановки

Символ * - це символ підстановки (wildcard), який відповідає нулю або більшій кількості будь-яких символів. Розглянемо каталог shell-lesson-data/exercise-data/proteins: *.pdb відповідає ethane.pdb, propane.pdb і кожному файлу, який закінчується на ‘.pdb’. З іншого боку, p*.pdb підходить тільки для файлів pentane.pdb і propane.pdb, оскільки початкова літера ‘p’ лише збігається з назвами файлів, які починаються з літери ‘p’.

Символ ? також є символом підстановки, але він відповідає рівно одному будь-якому символу. Отже, ?ethane.pdb буде відповідати methane.pdb, тоді як *ethane.pdb відповідає як ethane.pdb, так і methane.pdb.

Символи підстановки можна використовувати разом, комбінуючи їх у шаблонах. Наприклад, ???ane.pdb відповідає трьом символам, за якими слідує ane.pdb, що дає cubane.pdb ethane.pdb octane.pdb.

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

Вправа

Отримання переліку імен файлів, що відповідають шаблону

При виконанні в каталозі alkanes, яка з команд 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..

Вправа

Більше про символи підстановки

Саманта має каталог, який містить дані калібрування, набори даних та їх описи:

BASH

.
├── 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

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

BASH

$ 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/

Допоможіть Саманті, заповнивши пропуски.

Отримана структура каталогів повинна виглядати наступним чином:

BASH

.
├── 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

BASH

$ 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/
Вправа

Упорядкування каталогів і файлів

Джеймі працює над проєктом і бачить, що її файли не дуже добре впорядковані:

BASH

$ ls -F

ВИХІД

analyzed/  fructose.dat    raw/   sucrose.dat

Файли fructose.dat та sucrose.dat містять результати її аналізу. Яку (які) команду (команди), розглянуту (розглянуті) у цьому уроці, їй потрібно виконати, щоб наведені нижче команди вивели результати наведені нижче?

BASH

$ ls -F

ВИХІД

analyzed/   raw/

BASH

$ ls analyzed

ВИХІД

fructose.dat sucrose.dat

BASH

mv *.dat analyzed

Джеймі потрібно перемістити файли fructose.dat та sucrose.dat до каталогу analyzed. Термінал розгорне шаблон *.dat до переліку усіх файлів .dat у поточному каталозі. Команда mv перемістить ці файли .dat до каталогу ‘analyzed’.

Вправа

Відтворення структури каталогів

Ви починаєте новий експеримент і бажаєте продублювати структуру каталогів з попереднього експерименту, щоб потім додати нові дані.

Припустимо, що попередній експеримент знаходиться у каталозі з назвою 2016-05-18, який містить каталог data, який аналогічно містить каталоги raw і processed у яких містяться файли даних. Мета полягає у копіюванні структури 2016-05-18 до каталогу 2016-05-20 таким чином, щоб ваша фінальна структура виглядала наступним чином:

ВИХІД

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

Який з наведених нижче наборів команд досягне цієї мети? Що зроблять інші команди?

BASH

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

BASH

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

BASH

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

BASH

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

BASH

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

Перші два набори команд досягають цієї мети. Перший набір використовує відносні шляхи для створення каталогу верхнього рівня перед створенням підкаталогів.

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

Четвертий набір команд теж досягає цієї мети. Пам’ятайте, що опція -p, після якої вказується шлях до одного або декількох каталогів, змусить mkdir створити будь-які проміжні підкаталоги за потреби.

Останній набір команд створить каталоги ‘raw’ і ‘processed’ на тому ж рівні, що і каталог ‘data’.

Ключові моменти
  • cp [old] [new] копіює файл.
  • mkdir [path] створює новий каталог.
  • mv [old] [new] переміщує (перейменовує) файл або каталог.
  • rm [path] вилучає (видаляє) файл.
  • * відповідає нулю або більшій кількості символів в імені файлу, тому *.txt відповідає всім файлам, імена яких закінчуються на .txt.
  • ? відповідає будь-якому одному символу у назві файлу, тому ?.txt відповідає a.txt, але не any.txt.
  • Використання клавіші Control можна описати різними способами, зокрема Ctrl-X, Control-X та ^X.
  • В терміналі немає кошика для сміття: як тільки щось видалено - його неможливо відновити.
  • Більшість файлів мають назву на кшталт “щось.розширення”. Розширення не є обов’язковим і нічого не гарантує, але зазвичай використовується для позначення типу даних у файлі.
  • Залежно від типу вашої роботи вам може знадобитися потужніший ніж Nano текстовий редактор.