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