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

Оцените статью
TutoryBird.Ru
Добавить комментарий