Поиск по сайту:

Копируйте файлы и одновременно создавайте целевые каталоги в 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 install

Способ 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 могут создать только один каталог. Пожалуйста, поправьте меня, если я ошибаюсь.

Связанное чтение:

  • Как сохранить право собственности и права доступа к файлам при копировании файлов или каталогов

Статьи по данной тематике