Terminal Icon

Дойдя до статьи № 23 фирменного цикла «Секреты Терминала«, мы осознали, что толком не рассказали нашим читателям про несколько полезнейших операций командной строки OS X, касающихся копирования, перемещения и сравнения файлов. А ведь вводом нескольких символов можно сэкономить время на операциях в Finder, особенно учитывая, что яблочный файловый менеджер банально не умеет искать отличия в двух объектах. Самое время изучить работу с файлами, директориями и научиться их сравнивать в Терминале.

Копирование и перемещение файлов/папок

Для простейшего копирования и перемещения файлов Терминал имеет в своём распоряжении команды cp  и mv. Работают они по одинаковой схеме «cp (mv) откуда куда«. Например (файл index.txt — произвольный):

cp ~/Desktop/index.txt ~/Documents

В данном случае файл «index.txt» копируется с Рабочего стола и Документы. Если вы используете команду mv вместо cp, то уже произойдёт перемещение, которое яблочники по сей день остерегаются вставлять в Finder.

Но наш цикл «Секреты Терминала» называется так неспроста, поэтому мы глубже рассмотрим копирование файлов, папок и целых директорий посредством более хитрых команд. Одной из них будет ditto. В отличие от cp, ditto всегда копирует директорию вместе с её содержимом, при этом в пункте назначения автоматически создаётся прописанный каталог, если ранее его там не было.

Ditto придерживается схожей с cp схемы «ditto откуда куда«:

ditto ~/Desktop/Ololo ~/Documents/Ololo/

Важно знать то, что ditto скопирует директорию со всеми правами доступа и мета-данными, которые пригодятся, если придётся перемещать данные от одного пользователя к другому. Команда cp подобное делать не умеет.

Если ditto обнаружит, что путь, по которому вы собираетесь копировать файлы, уже существует, то есть папка создана, произойдёт объединение каталогов:

ditto ~/Pictures/Winter2015/ ~/TranscendJet/PhotoBackup/Winter2015/

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

ditto -V —norsrc ~/Otkuda/Kopirovat /Kuda/Kopirovat

Атрибуты «-norsrc» лишают ditto всех преимуществ, однако, иногда эта связка действительно помогает.

Снимок экрана 2016-03-19 в 19.23.20

Если вы планируете как следует изучить тонкости ditto, то вбивайте команду ниже и изучайте описание:

man ditto

Теперь вы знаете основы копирования и перемещения файлов через Терминал. Команда ditto поистине универсальна и гибка, подходит для быстрого клонирования каталогов, при этом она бережно относится к файлам, объединяет директории, сохраняет права доступа с мета-данными, не так зациклена на использовании слешей, как cp. Поэтому со спокойной душой переходим к следующей операции, касающейся сравнения папок.

Сравнение содержимого двух папок

Снимок экрана 2016-03-19 в 19.28.11

Самое время расчехлить команду diff. Она, к слову, способна сравнивать как папки, так и файлы. Принцип работы выглядит вот так: «diff -rq папка (файл) 1 папка (файл) 2«. Аргумент «-r» служит для того, чтобы Терминал отображал папку с подпапками, а «-q» предотвращает построчную развёртку отличий текстовых файлов. Перед запуском команды можно перейти в директорию, где находятся папки для сравнения. И затем вбить команду:

diff -rq folder1 folder2

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

diff -rq ~/Desktop/terminal ~/Pictures/fall2015

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

Построчное сравнение содержимого двух файлов

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

comm file1.txt file2.txt

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

Снимок экрана 2016-03-19 в 19.13.36

К примеру, мы взяли два php-файла. Результат сравнения отображён на скриншоте выше. Силами командной строки были добыты все строки из обоих файлов.

Ну, а теперь – занавес, уважаемые читатели. Мы поведали о самых необходимых командах для копирования, перемещения и сравнения файлов/папок, а в следующие выпусках постараемся откопать не менее полезные «Секреты Терминала».

Поделитесь страницей через социальные сети