Скопируйте каталог в Linux — Как создать папку в командной строке в Linux и Unix (MacOS)

skopirujte katalog v linux kak sozdat papku v komandnoj

Чтобы скопировать файлы или каталоги в операционных системах на базе Unix (Linux и MacOS), вы используете файл cp команда.

The cp Команда является относительно простой командой, но ее поведение несколько меняется в зависимости от входящих данных (файлы или каталоги) и параметров, которые вы передаете.

Для просмотра документации или руководства для cp командовать, бежать man cp в вашем терминале:

$ man cp

NAME
     cp -- copy files

SYNOPSIS
     cp [OPTIONS] source_file target_file
     cp [OPTIONS] source_file ... target_directory

...

Основная форма этой команды принимает источник ввода (или источника), которые вы хотите скопировать (файлы или каталоги), и место назначения для копирования файлов или каталогов:

cp [OPTIONS] source_file target_file

Как скопировать файл в текущий каталог

Чтобы скопировать файл, введите файл, который вы хотите скопировать, и путь, куда вы хотите скопировать файл.

Если у вас есть файл с именем a.txtи вы хотите получить копию этого файла с именем b.txt:

$ ls
a.txt

$ cp a.txt b.txt

$ ls
a.txt   b.txt

Если вы не знакомы с ls команда, ls «перечисляет» все содержимое каталога.

По умолчанию cp команда использует ваш текущий каталог как путь.

Как скопировать файл в другой каталог

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

$ ls ../directory-1/

$ cp a.txt ../directory-1/

$ ls ../directory-1/
a.txt

После cp команда, ранее пустая directory-1 теперь содержит файл a.txt.

По умолчанию скопированный файл получает имя исходного файла, но вы можете также по желанию передать имя файла:

$ cp a.txt ../directory-1/b.txt

$ ls ../directory-1/
b.txt

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

Чтобы скопировать более одного файла одновременно, можно передать несколько источников ввода и каталог в качестве назначения:

$ ls ../directory-1/

$ cp first.txt second.txt ../directory-1/

$ ls ../directory-1/
first.txt       second.txt

Здесь два источника входа (first.txt и second.txt) оба были скопированы в каталог directory-1.

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

Как скопировать каталог в другой каталог

Если вы попытаетесь передать каталог в качестве источника ввода, вы получите эту ошибку:

$ cp directory-1 directory-2
cp: directory-1 is a directory (not copied).

Чтобы скопировать каталог, нужно добавить -r (или -R) флаг — это сокращение для --recursive:

$ ls directory-1
a.txt

$ cp -r directory-1 directory-2

$ ls
directory-1          directory-2

$ ls directory-2
a.txt

Здесь directory-1 содержащий файл a.txt копируется в новый каталог под названием directory-2— который также содержит файл a.txt.

Как скопировать весь каталог против содержимого каталога

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

Вот описание из -R вариант man страница:

Если source_file обозначает каталог, cp копирует каталог и все поддеревье, подключенное к этой точке. Если исходный файл заканчивается символом /, копируется содержимое каталога, а не сам каталог.

Если вы хотите скопировать только содержимое каталога в другой каталог, добавьте конечный / на ваш вход.

Если вы хотите скопировать содержимое каталога и саму папку каталога в другой каталог, не добавляйте завершения /:

$ ls
directory-1          directory-2

$ ls directory-2

$ cp -r directory-1 directory-2

$ ls directory-2
directory-1

$ ls directory-2/directory-1
a.txt

Здесь вы можете увидеть это, потому что directory-2 уже существует — и источник ввода не имеет конечного значения /— оба содержания directory-1 и сам каталог был скопирован в место назначения.

Как предотвратить перезапись файлов с помощью cp

По умолчанию, cp команда перезапишет существующие файлы:

$ cat a.txt
A

$ cat directory-1/a.txt
B

$ cp a.txt directory-1/a.txt

$ cat directory-1/a.txt
A

Если вы не знакомы с cat или команду «concatenate», она печатает содержимое файла.

Есть два способа предотвратить это.

Интерактивный флаг

Чтобы получить запрос, когда должна произойти перезапись, вы можете добавить -i или --interactive флаг:

$ cp -i a.txt directory-1/a.txt
overwrite directory-1/a.txt? (y/n [n])

Запретный флаг

Или, чтобы предотвратить перезапись без запроса, вы можете добавить -n или --no-clobber флаг:

$ cat a.txt
A

$ cat directory-1/a.txt
B

$ cp -n a.txt directory-1/a.txt

$ cat directory-1/a.txt
B

Здесь вы можете убедиться, что благодаря -n пометить содержимое directory-1/a.txt не были перезаписаны.

Другие варианты

Есть много других полезных опций для перехода на cp команда: нравится -v для «подробного» вывода или -f за «силу».

Я очень советую вас прочесть man страницу для всех прочих полезных опций.

Если вам понравился этот урок, я тоже рассказываю о подобных темах в Twitter и пишу о них на своем сайте.

Добавить комментарий

Ваш адрес email не будет опубликован.