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

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

Огляд

Питання

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

Цілі

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

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


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

У цьому уроці ми дізнаємося про створення та переміщення файлів і каталогів на прикладі каталогу 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 або майже як завгодно. However, most people use two-part names most of the time to help them (and their programs) tell different kinds of files apart. The second part of such a name is called the filename extension and indicates what type of data the file holds: .txt signals a plain text file, .pdf indicates a PDF document, .cfg is a configuration file full of parameters for some program or other, .png is a PNG image, and so on.

This is just a convention, albeit an important one. Files merely contain bytes; it’s up to us and our programs to interpret those bytes according to the rules for plain text files, PDF documents, configuration files, images, and so on.

Якщо ви назвете зображення кита у форматі PNG як whale.mp3, це не перетворить його якимось чарівним чином на запис пісні кита, хоча це може змусити операційну систему спробувати відкрити його за допомогою музичного плеєра. In this case, if someone double-clicked whale.mp3 in a file explorer program, the music player will automatically (and erroneously) attempt to open the whale.mp3 file.

Moving files and directories


Returning to the shell-lesson-data/exercise-data/writing directory,

BASH

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

In our thesis directory we have a file draft.txt which isn’t a particularly informative name, so let’s change the file’s name using mv, which is short for ‘move’:

BASH

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

The first argument tells mv what we’re ‘moving’, while the second is where it’s to go. In this case, we’re moving thesis/draft.txt to thesis/quotes.txt, which has the same effect as renaming the file. Sure enough, ls shows us that thesis now contains one file called quotes.txt:

BASH

$ ls thesis

ВИХІД

quotes.txt

One must be careful when specifying the target file name, since mv will silently overwrite any existing file with the same name, which could lead to data loss. За замовчуванням mv не запитуватиме підтвердження перед перезаписом файлів. Однак додатковий параметр mv -i (або mv --interactive) змусить mv запросити таке підтвердження.

Note that mv also works on directories.

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

BASH

$ mv thesis/quotes.txt .

The effect is to move the file from the directory it was in to the current working directory. ls now shows us that thesis is empty:

BASH

$ ls thesis

ВИХІД

$

Alternatively, we can confirm the file quotes.txt is no longer present in the thesis directory by explicitly trying to list it:

BASH

$ ls thesis/quotes.txt

ПОМИЛКА

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

ls with a filename or directory as an argument only lists the requested file or directory. If the file given as the argument doesn’t exist, the shell returns an error as we saw above. We can use this to see that quotes.txt is now present in our current directory:

BASH

$ ls quotes.txt

ВИХІД

quotes.txt
Вправа

Moving Files to a new folder

Після виконання наступних команд Джеймі зрозуміла, що помістила файли sucrose.dat та maltose.dat не до того каталогу. The files should have been placed in the raw folder.

BASH

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

Fill in the blanks to move these files to the raw/ folder (i.e. the one she forgot to put them in)

BASH

$ mv sucrose.dat maltose.dat ____/____

BASH

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

Recall that .. refers to the parent directory (i.e. one above the current directory) and that . refers to the current directory.

Copying files and directories


The cp command works very much like mv, except it copies a file instead of moving it. We can check that it did the right thing using ls with two paths as arguments — like most Unix commands, ls can be given multiple paths at once:

BASH

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

ВИХІД

quotes.txt   thesis/quotations.txt

We can also copy a directory and all its contents by using the recursive option -r, e.g. to back up a directory:

BASH

$ cp -r thesis thesis_backup

We can check the result by listing the contents of both the thesis and thesis_backup directory:

BASH

$ ls thesis thesis_backup

ВИХІД

thesis:
quotations.txt

thesis_backup:
quotations.txt

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

BASH

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

Renaming Files

Припустімо, що ви створили у поточному каталозі простий текстовий файл, який містить список статистичних тестів, які вам знадобляться для аналізу ваших даних, і назвали його statstics.txt

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

  1. cp statstics.txt statistics.txt
  2. mv statstics.txt statistics.txt
  3. mv statstics.txt .
  4. cp statstics.txt .
  1. Ні. Хоча це створить файл з правильною назвою, неправильно названий файл все одно існуватиме у каталозі, і його потрібно буде видалити.
  2. Yes, this would work to rename the file.
  3. Ні, крапка (.) indicates where to move the file, but does not provide a new file name; identical file names cannot be created.
  4. Ні, крапка (.) indicates where to copy the file, but does not provide a new file name; identical file names cannot be created.
Вправа

Moving and Copying

What is the output of the closing ls command in the sequence shown below?

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

Removing files and directories


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

BASH

$ rm quotes.txt

We can confirm the file has gone using ls:

BASH

$ ls quotes.txt

ПОМИЛКА

ls: cannot access 'quotes.txt': No such file or directory
Виноска

Deleting Is Forever

The Unix shell doesn’t have a trash bin that we can recover deleted files from (though most graphical interfaces to Unix do). Instead, when we delete files, they are unlinked from the file system so that their storage space on disk can be recycled. Tools for finding and recovering deleted files do exist, but there’s no guarantee they’ll work in any particular situation, since the computer may recycle the file’s disk space right away.

Вправа

Using rm Safely

What happens when we execute rm -i thesis_backup/quotations.txt? Why would we want this protection when using rm?

ВИХІД

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

The -i option will prompt before (every) removal (use Y to confirm deletion or N to keep the file). The Unix shell doesn’t have a trash bin, so all the files removed will disappear forever. By using the -i option, we have the chance to check that we are deleting only the files that we want to remove.

If we try to remove the thesis directory using rm thesis, we get an error message:

BASH

$ rm thesis

ПОМИЛКА

rm: cannot remove `thesis': Is a directory

This happens because rm by default only works on files, not directories.

rm can remove a directory and all its contents if we use the recursive option -r, and it will do so without any confirmation prompts:

BASH

$ rm -r thesis

Given that there is no way to retrieve files deleted using the shell, rm -r should be used with great caution (you might consider adding the interactive option rm -r -i).

Operations with multiple files and directories


Oftentimes one needs to copy or move several files at once. This can be done by providing a list of individual filenames, or specifying a naming pattern using wildcards. Wildcards are special characters that can be used to represent unknown characters or sets of characters when navigating the Unix file system.

Вправа

Copy with Multiple Filenames

For this exercise, you can test the commands in the shell-lesson-data/exercise-data directory.

In the example below, what does cp do when given several filenames and a directory name?

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

If given more than one file name followed by a directory name (i.e. the destination directory must be the last argument), cp copies the files to the named directory.

If given three file names, cp throws an error such as the one below, because it is expecting a directory name as the last argument.

ПОМИЛКА

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

Using wildcards for accessing multiple files at once

Виноска

Wildcards

* is a wildcard, which represents zero or more other characters. Розглянемо каталог shell-lesson-data/exercise-data/proteins: *.pdb відповідає ethane.pdb, propane.pdb і кожному файлу, який закінчується на ‘.pdb’. On the other hand, p*.pdb only represents pentane.pdb and propane.pdb, because the ‘p’ at the front can only represent filenames that begin with the letter ‘p’.

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

Wildcards can be used in combination with each other. Наприклад, ???ane.pdb відповідає трьом символам, за якими слідує ane.pdb, що дає cubane.pdb ethane.pdb octane.pdb.

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

Вправа

List filenames matching a pattern

При виконанні в каталозі 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. fixes the problems of option 2 by matching two characters (??) between t and ne. Це і є рішення.

4. показує лише файли, що починаються з ethane..

Вправа

More on Wildcards

Sam has a directory containing calibration data, datasets, and descriptions of the datasets:

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

Before heading off to another field trip, she wants to back up her data and send some datasets to her colleague Bob. Саманта використовує наступні команди щоб виконати цю роботу:

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/

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

The resulting directory structure should look like this

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

Organizing Directories and Files

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

BASH

$ ls -F

ВИХІД

analyzed/  fructose.dat    raw/   sucrose.dat

The fructose.dat and sucrose.dat files contain output from her data analysis. What command(s) covered in this lesson does she need to run so that the commands below will produce the output shown?

BASH

$ ls -F

ВИХІД

analyzed/   raw/

BASH

$ ls analyzed

ВИХІД

fructose.dat sucrose.dat

BASH

mv *.dat analyzed

Джеймі потрібно перемістити файли fructose.dat та sucrose.dat до каталогу analyzed. The shell will expand *.dat to match all .dat files in the current directory. The mv command then moves the list of .dat files to the ‘analyzed’ directory.

Вправа

Reproduce a folder structure

You’re starting a new experiment and would like to duplicate the directory structure from your previous experiment so you can add new data.

Assume that the previous experiment is in a folder called 2016-05-18, which contains a data folder that in turn contains folders named raw and processed that contain data files. The goal is to copy the folder structure of the 2016-05-18 folder into a folder called 2016-05-20 so that your final directory structure looks like this:

ВИХІД

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

Which of the following set of commands would achieve this objective? What would the other commands do?

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

The first two sets of commands achieve this objective. The first set uses relative paths to create the top-level directory before the subdirectories.

The third set of commands will give an error because the default behavior of mkdir won’t create a subdirectory of a non-existent directory: the intermediate level folders must be created first.

The fourth set of commands achieve this objective. Remember, the -p option, followed by a path of one or more directories, will cause mkdir to create any intermediate subdirectories as required.

The final set of commands generates the ‘raw’ and ‘processed’ directories at the same level as the ‘data’ directory.

Ключові моменти
  • cp [old] [new] копіює файл.
  • mkdir [path] створює новий каталог.
  • mv [old] [new] переміщує (перейменовує) файл або каталог.
  • rm [path] вилучає (видаляє) файл.
  • * matches zero or more characters in a filename, so *.txt matches all files ending in .txt.
  • ? відповідає будь-якому одному символу у назві файлу, тому ?.txt відповідає a.txt, але не any.txt.
  • Використання клавіші Control можна описати різними способами, зокрема Ctrl-X, Control-X та ^X.
  • The shell does not have a trash bin: once something is deleted, it’s really gone.
  • Most files’ names are something.extension. Розширення не є обов’язковим і нічого не гарантує, але зазвичай використовується для позначення типу даних у файлі.
  • Depending on the type of work you do, you may need a more powerful text editor than Nano.