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

Как скопировать файл в несколько каталогов с помощью одной команды в Linux


Скопировать файл с помощью командной строки Linux очень просто. Однако что, если вы хотите скопировать один и тот же файл в несколько разных мест? Это тоже просто, и мы покажем вам, как это сделать с помощью одной команды.

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

cp ~/Documents/FileToBeCopied.txt ~/TextFiles/

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

cp ~/Documents/FileToBeCopied.txt ~/Dropbox/
cp ~/Documents/FileToBeCopied.txt /media/lori/MYUSBDRIVE/

Однако мы можем выполнить ту же задачу с помощью одной команды:

echo dir1 dir2 dir3 | xargs -n 1 cp file1

Вот как работает эта команда. Команда echo обычно выводит данные на экран. Однако в этом случае мы хотим передать выходные данные команды echo в качестве входных данных для команды xargs. Для этого мы используем символ вертикальной черты ( | ), который передает выходные данные одной команды в качестве входных данных для другой. Команда xargs запускает команду cp три раза, каждый раз добавляя в конец путь к следующему каталогу, переданный ей командой echo. команды cp. В xargs передаются три аргумента, но параметр -n 1 в команде xargs указывает добавить только один из этих аргументов в время для команды cp при каждом ее запуске.

Итак, чтобы придерживаться нашего предыдущего примера, три отдельные команды cp выше можно объединить в одну команду следующим образом:

echo ~/TextFiles/ ~/Dropbox /media/lori/MYUSBDRIVE | xargs -n 1 cp ~/Documents/FileToBeCopied.txt

Обратите внимание, что если копируемый файл существует в любом из указанных каталогов назначения, файл в этом месте назначения будет заменен автоматически. Вас не спросят, хотите ли вы заменить файл. (Обычно, когда вы используете команду cp для копирования файла в одно место, вы можете добавить параметр -i, чтобы спросить, хотите ли вы заменить существующий файл. Однако параметр -i является интерактивным (он заставляет команду cp запрашивать ввод у пользователя), и вы не можете использовать интерактивный параметр с параметром . cp при использовании вместе с xargs .)

Еще одна вещь, которую следует учитывать, это то, что если вы копируете очень большой файл, вы можете добавить опцию no-clobber ( -n ) в команду cp в единственная команда выше. Этот параметр автоматически предотвращает перезапись файла в месте назначения, если он там уже существует. Если вы копируете очень большой файл по сети, это может быть медленным, и вы можете не использовать ресурсы, необходимые для копирования и замены файла. Следующая команда добавляет параметр -n и не будет копировать файл ни в какое место назначения, указанное в аргументах оператора echo, если файл уже существует в этом месте назначения.

echo ~/TextFiles/ ~/Dropbox /media/lori/MYUSBDRIVE | xargs -n 1 cp -n ~/Documents/FileToBeCopied.txt

Введите man echo, man xargs или man cp в командной строке Linux, чтобы получить дополнительные сведения о любой из этих команд.