Как скопировать файл в несколько каталогов с помощью одной команды в 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, чтобы получить дополнительные сведения о любой из этих команд.