Обычно, чтобы скопировать один файл, вы должны использовать
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 statement, если файл уже существует в этом месте назначения.
echo ~/TextFiles/ ~/Dropbox /media/lori/MYUSBDRIVE | xargs -n 1 cp -n ~/Documents/FileToBeCopied.txt