Копируйте файлы и одновременно создавайте целевые каталоги в Linux
Обычно мы копируем файлы из одного места в другое, существующее, с помощью таких команд, как cp
, rsync
и scp
и т. д. Если целевое расположение не существует, мы сначала создаем его, а затем копируем файл в это вновь созданное место. До сих пор я обычно копирую файлы из одного места в другое из командной строки именно так. Знаете ли вы, что мы можем скопировать файл и автоматически создать каталог назначения, если он не существует? Нет? Без проблем! В этом руководстве мы увидим, как копировать файлы и одновременно создавать целевые каталоги с помощью одной команды в Linux.
Обратите внимание: я не говорю об объединении двух команд. Например, любой может сделать это, объединив две команды, как показано ниже:
mkdir -p destination && cp source_file destination
Но это не одна команда. Здесь мы использовали две команды: mkdir
и cp
. На самом деле это однострочная команда. Теперь позвольте мне показать, как выполнить ту же задачу, используя только одну команду.
Копируйте файлы и одновременно создавайте целевые каталоги в Linux
Мы можем сделать это, используя три разных метода. Сначала мы увидим, как это сделать с помощью команды install
.
Способ 1 — с помощью команды install
Команда install
копирует файлы в любое место по вашему выбору в Linux. Он специально используется для этой цели в системах сборки, таких как automake
. Он является частью GNU coreutils, поэтому вам не нужно его устанавливать.
Чтобы скопировать файл и одновременно создать каталог назначения с помощью команды install
, просто запустите:
install -D source-file destination-directory
Пример:
Следующая команда копирует файл с именем sk.txt
в целевой каталог с именем ostechnix
. Обратите внимание, что целевой каталог не существует. Мы собираемся скопировать файл и одновременно создать каталог назначения с помощью команды install
, как показано ниже:
install -D sk.txt ostechnix/sk.txt
Убедитесь, что файл был скопирован в каталог ostechnix
, перечислив его содержимое с помощью команды ls
:
ls ostechnix/
sk.txt
Скопируйте файл и одновременно создайте целевой каталог с помощью команды установки.
Видеть? Я раньше не создавал целевой каталог. Команда установки автоматически создала каталог и сохранила в нем файл.
Удобно, правда? Действительно! Это одна из полезных функций команды install
. Это можно использовать в сценариях оболочки.
У этого метода есть несколько ограничений. Вы должны указать имя исходного файла в конце места назначения. Если вы не укажете имя файла, команда install
не скопирует его и отобразит следующую ошибку:
install -D sk.txt ostechnix/
install: target 'ostechnix/' is not a directory: No such file or directory
Вы можете копировать один файл за раз. Невозможно скопировать несколько файлов в несколько мест назначения с помощью команды install
.
Мы также можем копировать файлы и одновременно менять владельца и разрешения с помощью команды install
, как описано в следующем руководстве.
- Как скопировать файлы и одновременно изменить владельца и разрешения
Более подробную информацию о команде установки можно найти на ее странице руководства.
man instal
l
Способ 2 — использование команды cp
Обычно мы используем команду cp
для копирования файлов из одного места в другое. Команда cp
имеет опцию --parents
, которая позволяет нам скопировать всю структуру каталогов исходного файла и сохранить ее в месте назначения.
Например, скажем, файл sk.txt
сохранен в каталоге ~/Downloads
, и вы хотите скопировать его в ~/Documents
. каталог. Если вы скопируете файл с помощью команды cp
из ~/Downloads
в ~/Documents
, файл будет сохранен в такой структуре каталогов -> ~/Documents/Downloads/sk.txt
.
Давайте сделаем это в реальном времени и посмотрим, что произойдет.
cp --parents Downloads/sk.txt ~/Documents/
Теперь запустите команду tree
, чтобы проверить содержимое каталога ~/Documents
:
tree Documents/
Documents/
└── Downloads
└── sk.txt
1 directory, 1 file
Скопируйте файл и одновременно создайте целевой каталог с помощью команды cp.
Помните, что мы не создавали никаких каталогов внутри местоположения ~/Documents
. Опция --parents
команды cp
сохраняет структуру каталогов исходного файла.
В отличие от команды install
, вам не нужно указывать имя файла в конце каталога назначения.
Это не имеет прямого отношения к нашей теме. Однако команда cp
автоматически создала целевые каталоги, т. е. сохранила структуру каталогов исходного файла.
Способ 3 — использование команды rsync
Rsync
— идеальное решение для копирования и резервного копирования данных между локальными и удаленными каталогами. Чтобы скопировать файлы и одновременно создать целевые каталоги с помощью команды rsync, запустите:
rsync sk.txt ostechnix/
Где каталог с именем ostechnix
не обязательно должен существовать. Rsync создаст его автоматически и сохранит внутри него исходный файл.
Скопируйте файл и одновременно создайте целевой каталог с помощью команды rsync.
Среди этих трех команд я предпочитаю команду install
. Потому что я могу создавать вложенные каталоги (каталог внутри другого каталога) с помощью команды install
. Насколько мне известно, команды cp
и rsync
могут создать только один каталог. Пожалуйста, поправьте меня, если я ошибаюсь.
Связанное чтение:
- Как сохранить право собственности и права доступа к файлам при копировании файлов или каталогов