Огляд
Викладання: хв
Вправи: хвПитання
Цілі
Створення каталогів
Тепер ми знаємо, як досліджувати файли та каталоги, але як їх створювати?
На цьому уроці ми дізнаємося про створення та переміщення файлів і каталогів
на прикладі каталогу exercise-data/writing
.
Крок перший: подивіться, де ми знаходимося і що вже маємо
Ми все ще маємо бути у каталозі shell-lesson-data
на Робочому столі (англ. Desktop),
що ми можемо перевірити за допомогою:
$ pwd
/Users/nelle/Desktop/shell-lesson-data
Далі ми перейдемо до каталогу exercise-data/writing
і подивимося, що у ньому міститься:
$ cd exercise-data/writing/
$ ls -F
haiku.txt LittleWomen.txt
Створення каталогу
Створимо новий каталог з назвою thesis
за допомогою команди mkdir thesis
(яка не має виводу):
$ mkdir thesis
Як ви можете здогадатися з її назви,
команда mkdir
означає ‘зробити каталог’ (англ. ‘make directory’).
Оскільки thesis
є відносним шляхом
(тобто не має початкової косої риски, як /what/ever/thesis
),
новий каталог буде створено у поточному робочому каталозі:
$ ls -F
haiku.txt LittleWomen.txt thesis/
Оскільки ми щойно створили каталог thesis
, у ньому ще нічого немає:
$ ls -F thesis
Зауважте, що команда mkdir
не обмежується створенням окремих каталогів по одному.
Параметр -p
дозволяє команді mkdir
створювати каталог із вкладеними підкаталогами
за одну операцію:
$ mkdir -p ../project/data ../project/results
Параметр -R
до команди ls
покаже усі вкладені підкаталоги у каталозі.
Давайте скористаємося ls -FR
для рекурсивного відображення нової ієрархії каталогів, яку ми щойно створили у
каталозі project
:
$ ls -FR ../project
../project/:
data/ results/
../project/data:
../project/results:
Два способи зробити одне й те саме
Використання терміналу для створення каталогу нічим не відрізняється від використання файлового провідника. Якщо ви відкриваєте поточний каталог за допомогою графічного провідника файлів вашої операційної системи, там також з’явиться каталог
thesis
. Хоча термінал і файловий провідник - це два різні способи взаємодії з файлами, файли та каталоги одні й ті ж самі.
Хороші імена для файлів і каталогів
Складні назви файлів і каталогів можуть зробити ваше життя болісним під час роботи з командним рядком. Тут ми надаємо кілька корисних підказок щодо назв ваших файлів і каталогів.
- Не використовуйте пробіли.
Пробіли можуть зробити назву більш змістовною, але оскільки пробіли використовуються для відокремлення аргументів у командному рядку краще уникати їх у назвах файлів і каталогів. Ви можете використовувати
-
або_
(наприклад,north-pacific-gyre/
замістьnorth pacific gyre/
). Щоб перевірити це, спробуйте набратиmkdir north pacific gyre
і подивіться, який каталог (або каталоги!) буде створено при перевірці за допомогоюls -F
.
- Не починайте назву з
-
(тире).Команди розглядають назви, що починаються з
-
, як опції.
- Використовуйте літери, цифри,
.
(крапка),-
(тире) і_
(підкреслення).Багато інших символів мають особливе значення у командному рядку. Про деякі з них ми дізнаємося в цьому уроці. Існують спеціальні символи, які можуть призвести до того, що ваша команда працюватиме не так, як очікувалося і навіть призвести до втрати даних.
Якщо вам потрібно звернутися до назв файлів або каталогів, які містять пробіли або інші спеціальні символи, вам слід взяти назву у лапки (
""
).
Створення текстового файлу
Давайте змінимо наш робочий каталог на thesis
за допомогою cd
,
а потім запустимо текстовий редактор Nano і створимо файл з назвою draft.txt
:
$ cd thesis
$ nano draft.txt
Який редактор?
Коли ми говоримо, що “nano” - це текстовий редактор, ми дійсно маємо на увазі “текст”: він може працювати лише з простими символьними даними, а не з таблицями, зображеннями чи будь-якими іншими зручними для людини даними. Ми використовуємо його у прикладах, тому що це один з найменш складних текстових редакторів. Однак, через цю особливість він може бути недостатньо потужним або гнучким для роботи, яку вам потрібно буде виконати після завершення наших уроків. У системах Unix (таких як Linux та macOS), багато програмістів використовують [Emacs] (http://www.gnu.org/software/emacs/) або Vim (обидва вимагають більше часу на вивчення), або графічний редактор, такий як Gedit. У Windows, можливо, ви захочете скористатися [Notepad++] (http://notepad-plus-plus.org/). У Windows також є вбудований редактор з назвою
notepad
, який можна запустити з командного рядка таким самим чином, як іnano
для цілей цього уроку.Незалежно від того, яким редактором ви користуєтеся, вам потрібно знати, де він шукає і зберігає файли. Якщо ви запускаєте його з командного рядка, він (ймовірно) використовуватиме ваш поточний робочий каталог як місце за замовчуванням. Якщо ви використовуєте меню “Пуск” вашого комп’ютера, можливо, програма захоче зберегти файли на робочому столі або в каталозі документів (Documents) замість цього. Ви можете змінити це, перейшовши до іншого каталогу під час першого виконання команди “Зберегти як…”.
Давайте наберемо кілька рядків тексту.
Після того, як ми будемо задоволені нашим текстом, ми можемо натиснути Ctrl+O
(натисніть клавішу Ctrl або 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 Отримати довідку ^O Вивести на екран
. Це означає, що ви можете скористатисяControl-G
для отримання довідки іControl-O
для збереження вашого файлу.
Після завершення роботи команда nano
не залишає жодних даних на екрані,
але ls
тепер показує, що ми створили файл з назвою draft.txt
:
$ ls
draft.txt
Створення файлів іншим способом
Ми побачили, як створювати текстові файли за допомогою редактора
nano
. Тепер спробуйте виконати наступну команду:$ touch my_file.txt
Що зробила команда
touch
? Коли ви дивитеся на ваш поточний каталог за допомогою провідника файлів у графічному інтерфейсі, чи відображається файл?Використовуйте
ls -l
для перегляду файлів. Який розмір має файлmy_file.txt
?Коли вам може знадобитися створити файл у такий спосіб?
Розв’язання
Команда
touch
створює новий файл з назвоюmy_file.txt
у вашому поточному каталозі. Ви можете переглянути цей новостворений файл, набравшиls
у командному рядку. Файлmy_file.txt
також можна переглянути у вашому графічному провіднику файлів.Коли ви перевіряєте файл за допомогою
ls -l
, зверніть увагу, що розмірmy_file.txt
дорівнює 0 байт. Іншими словами, він не містить жодних даних. Якщо ви відкриєтеmy_file.txt
за допомогою текстового редактора, він буде порожнім.Деякі програми самі не створюють вихідні файли, а натомість вимагають, щоб порожні файли вже було створено. Під час запуску програма шукає існуючий файл, щоб заповнити його своїми даними. За допомогою команди touch можна ефективно створити порожній текстовий файл для подальшого використання такими програмами.
Щоб уникнути плутанини в подальшому, радимо видалити файл, який ви щойно створили, перед тим, як переходити до решти епізоду, інакше майбутні результати можуть відрізнятися від наведених в уроці. Для цього скористайтеся наступною командою:
$ rm my_file.txt
Що ховається в імені?
Ви, мабуть, помітили, що всі файли Неллі називаються ‘щось крапка щось”, і у цій частині уроку ми завжди використовували розширення
.txt
. Це лише умовність: ми можемо назвати файлmythesis
або майже як завгодно. Однак, більшість людей використовують назви, що складаються з двох частин здебільшого для того, щоб допомогти їм (і їхнім програмам) розрізняти різні типи файлів. Друга частина такого імені називається розширенням файлу і вказує тип даних у файлі:.txt
вказує на звичайний текстовий файл,.cfg
- це конфігураційний файл з параметрами для тієї чи іншої програми,.png
- зображення у форматі PNG, і так далі.Це лише умовність, хоча й важлива. Файли містять байти: ми та наші програми повинні інтерпретувати ці байти відповідно до правил для звичайних текстових файлів, PDF-документів, конфігураційних файлів, зображень тощо.
Якщо ви назвете зображення кита у форматі PNG як “whale.mp3”, це не перетворить його якимось чарівним чином на запис пісні кита, хоча це може змусити операційну систему спробувати відкрити його за допомогою музичного плеєра, коли хтось двічі клікне на ньому.
Переміщення файлів і каталогів
Повернемося до каталогу shell-lesson-data/exercise-data/writing
,
$ cd ~/Desktop/shell-lesson-data/exercise-data/writing
У нашому каталозі thesis
є файл draft.txt
.
з не надто інформативною назвою,
тому давайте змінимо назву файлу за допомогою команди mv
,
що є скороченням від ‘move’ (з англ. - ‘переміщати’):
$ mv thesis/draft.txt thesis/quotes.txt
Перший аргумент говорить “mv”, що ми ‘переміщаємо’,
а другий - куди саме.
У цьому випадку
ми переміщуємо theis/draft.txt
до theis/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
$
Крім того, ми можемо переконатися, що файл quotes.txt
більше не присутній у каталозі thesis
,
явно спробувавши показати інформацію про нього:
$ ls thesis/quotes.txt
ls: cannot access 'thesis/quotes.txt': No such file or directory
Команда ls
з ім’ям файлу або каталогу в якості аргументу виводить лише список запитуваних файлів або каталогів.
Якщо файл, вказаний як аргумент, не існує, термінал поверне помилку, як ми бачили вище.
Ми можемо скористатися цим, щоб побачити, що файл quotes.txt
знаходиться у нашому поточному каталозі:
$ ls quotes.txt
quotes.txt
Переміщення файлів до нової папки
Після виконання наступних команд Джеймі зрозуміла, що поклала файли
sucrose.dat
таmaltose.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
.Після створення і збереження цього файлу ви зрозуміли, що неправильно написали назву файлу! Ви хочете виправити помилку, яку з наведених нижче команд ви можете використати для цього?
- `cp statstics.txt статистика.txt
- `mv statstics.txt статистика.txt
mv statstics.txt .
cp statstics.txt .
Розв’язок
- Ні. Хоча це створить файл з правильною назвою, неправильно названий файл все одно існуватиме у каталозі, і його потрібно буде видалити.
- Так, це допоможе перейменувати файл.
- Ні, крапка (.) вказує, куди перемістити файл, але не надає нового імені файлу; однакові назви файлів не можуть бути створені.
- Ні, крапка (.) вказує, куди скопіювати файл, але не надає нового імені файлу; не можна створювати однакові імена файлів.
Переміщення та копіювання
Що виводить остання команда
ls
у наведеній нижче послідовності?$ pwd
/Users/jamie/data
$ ls
proteins.dat
$ mkdir recombined $ mv proteins.dat recombined/ $ cp recombined/proteins.dat ../proteins-saved.dat $ ls
proteins-saved.dat recombined
recombined
proteins.dat recombined
.proteins-saved.dat
.Рішення
Ми розпочинаємо в каталозі
/Users/jamie/data
і створюємо нову папку з назвоюrecombined
. Другий рядок переміщує (mv
) файлproteins.dat
до нового каталогу (recombined
). Третій рядок робить копію файлу, який ми щойно перемістили. Складність полягає у тому, куди саме було скопійовано файл. Нагадаємо, що..
означає “піднятися на рівень вище”, тому скопійований файл тепер знаходиться у/Users/jamie
. Зверніть увагу, що..
інтерпретується відносно поточного робочого каталогу, а не відносно розташування файла, який копіюється. Отже, єдине, що буде показано за допомогою командиls
(у/Users/jamie/data
) - це каталогrecombined
.
- Ні, див. пояснення вище. Каталог
proteins-saved.dat
розташовано у каталозі/Users/jamie
.- Так
- Ні, див. пояснення вище. Файл
proteins.dat
знаходиться в каталозі/Users/jamie/data/recombined
.- Ні, див. пояснення вище. Файл
proteins-saved.dat
знаходиться в каталозі/Users/jamie
.
Видалення файлів і каталогів
Повертаючись до каталогу shell-lesson-data/exercise-data/writing
,
давайте почистимо цей каталог, видаливши створений нами файл quotes.txt
.
Для цього ми скористаємося командою Unix rm
(скорочення від англ. remove
- видаляти):
$ rm quotes.txt
Ми можемо підтвердити, що файл був видалений, за допомогою ls
:
$ ls quotes.txt
ls: cannot access 'quotes.txt': No such file or directory
Команда
ls
видаляє назавждиВ терміналі Unix немає кошика, з якого можна було б відновити видалені файли (хоча у більшості графічних інтерфейсів Unix він є). Замість цього коли ми видаляємо файли, вони від’єднуються від файлової системи, щоб їх місце на диску можна було використовувати повторно. Інструменти для пошуку та відновлення видалених файлів існують, але немає жодних гарантій, що вони працюватимуть у кожній конкретній ситуації, оскільки комп’ютер може повторно використати місце на диску, яке займав файл, одразу ж.
Безпечне використання
rm
Що відбувається, коли ми виконуємо
rm -i thesis_backup/quotations.txt
? Навіщо нам потрібен цей захист при використанніrm
?Рішення
rm: видалити звичайний файл '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
).
Операції з декількома файлами та каталогами
Часто потрібно скопіювати або перемістити кілька файлів одночасно. Це можна зробити, надавши список імен окремих файлів, або вказати шаблон імен за допомогою підстановочних знаків.
Копіювання з кількома іменами файлів
Для цієї вправи ви можете перевірити команди з каталогу
shell-lesson-data/exercise-data
.Що робить команда
cp
у наведеному нижче прикладі, коли їй задано декілька імен файлів і назву каталогу?$ mkdir backup $ cp creatures/minotaur.dat creatures/unicorn.dat backup/
Що робить команда
cp
у наведеному нижче прикладі, коли їй задано три або більше імен файлів?$ cd creatures $ ls -F
basilisk.dat minotaur.dat unicorn.dat
$ cp minotaur.dat unicorn.dat basilisk.dat
Розв’язання
Якщо задано більше одного імені файлу, за яким наведене ім’я каталогу, (тобто, каталог призначення має бути останнім аргументом), команда
cp
копіює файли до вказаного каталогу.Якщо задано три імені файлів,
cp
видасть помилку, подібну до наведеної нижче, оскільки очікує отримати ім’я каталогу як останній аргумент.cp: target 'basilisk.dat' is not a directory
Використання символів підстановки для доступу до кількох файлів одночасно
Символи підстановки
Символ
*
- це символ підстановки, який відповідає нулю або більшій кількості будь-яких символів. Розглянемо каталог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
) призведе до повідомлення про те, що не існує файла з назвоюwc
іls
показують списки > імен файлів, які відповідають цим виразам, але не самим символам підстановки. Саме термінал, а не інші програми, виконує розкриття символів підстановки.
Отримання переліку імен файлів, що відповідають шаблону
При виконанні в каталозі
proteins
, яка з командls
видасть наступний результат?
ethane.pdb methane.pdb
ls *t*ane.pdb
ls *t?ne.*
ls *t??ne.pdb
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/
Упорядкування каталогів і файлів
Джеймі працює над проєктом і бачить, що її файли не дуже добре впорядковані:
$ ls -F
analyzed/ fructose.dat raw/ sucrose.dat
Файли
fructose.dat
таucrose.dat
містять результати її аналізу. Яку команду (команди), розглянуту (розглянуті) у цьому уроці, їй потрібно виконати, щоб наведені нижче команди створили показані нижче результати?$ ls -F
analyzed/ raw/
$ ls analyzed
fructose.dat sucrose.dat
Розв’язання
mv *.dat analyzed
Джеймі потрібно перемістити файли
fructose.dat
таucrose.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
Який з наведених нижче наборів команд досягне цієї мети? Що зроблять інші команди?
$ 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
створити будь-які проміжні підкаталоги за потреби.Останній набір команд створить каталоги ‘raw’ і ‘processed’ на тому ж рівні, що і каталог ‘data’.
[workshop-repo]: [yaml]: http://yaml.org/
Ключові моменти