Sao chép tệp bằng dòng lệnh Linux thật dễ dàng. Tuy nhiên, điều gì sẽ xảy ra nếu bạn muốn sao chép cùng một tệp đến nhiều vị trí khác nhau? Điều đó cũng dễ dàng và chúng tôi sẽ chỉ cho bạn cách thực hiện điều đó bằng một lệnh.
Thông thường, để sao chép một tệp, bạn sẽ sử dụng cp
lệnh, liên kết đến tệp nguồn và thư mục đích:
cp ~/Documents/FileToBeCopied.txt ~/TextFiles/
Để sao chép nó vào hai thư mục khác, nhiều người sẽ chỉ chạy lệnh hai lần nữa, với các điểm đến khác nhau:
cp ~/Documents/FileToBeCopied.txt ~/Dropbox/
cp ~/Documents/FileToBeCopied.txt /media/lori/MYUSBDRIVE/
Tuy nhiên, chúng ta có thể thực hiện tác vụ tương tự với một lệnh:
echo dir1 dir2 dir3 | xargs -n 1 cp file1
Đây là cách lệnh này hoạt động. Các echo
lệnh thường ghi ra màn hình. Tuy nhiên, trong trường hợp này, chúng tôi muốn cung cấp đầu ra của echo
lệnh làm đầu vào cho xargs
chỉ huy. Để làm điều này, chúng tôi sử dụng ký hiệu ống ( |
) nguồn cấp dữ liệu đầu ra từ một lệnh dưới dạng đầu vào cho một lệnh khác. Các xargs
lệnh sẽ chạy cp
lệnh ba lần, mỗi lần thêm đường dẫn thư mục tiếp theo được dẫn đến nó từ echo
lệnh vào cuối cp
chỉ huy. Có ba đối số được chuyển đến xargs
, nhưng -n 1
tùy chọn trên xargs
lệnh yêu cầu nó chỉ nối một trong những đối số đó cùng một lúc vào cp
lệnh mỗi khi nó chạy.
Vì vậy, để gắn bó với ví dụ của chúng tôi từ trước, ba cp
các lệnh trên có thể được kết hợp thành một lệnh như sau:
echo ~/TextFiles/ ~/Dropbox /media/lori/MYUSBDRIVE | xargs -n 1 cp ~/Documents/FileToBeCopied.txt
Lưu ý rằng nếu tệp đang được sao chép tồn tại trong bất kỳ thư mục đích nào được chỉ định, tệp trong đích đó sẽ được thay thế tự động. Bạn sẽ không được hỏi nếu bạn muốn thay thế tệp. (Thông thường, khi bạn sử dụng cp
để sao chép một tệp vào một vị trí, bạn có thể thêm -i
để hỏi xem bạn có muốn thay thế tệp hiện có hay không. Tuy nhiên, -i
tùy chọn là một tùy chọn tương tác (nó gây ra cp
lệnh yêu cầu đầu vào từ người dùng) và bạn không thể sử dụng tùy chọn tương tác với cp
khi sử dụng nó kết hợp với xargs
.)
Một điều khác cần xem xét, là nếu bạn đang sao chép một tệp rất lớn, bạn có thể muốn thêm no-clobber ( -n
) tùy chọn cho cp
lệnh trong lệnh đơn ở trên. Tùy chọn này tự động ngăn không cho tệp bị ghi đè vào đích nếu tệp đã tồn tại ở đó. Nếu bạn đang sao chép một tệp rất lớn qua mạng, tệp này có thể chậm và bạn có thể muốn tránh sử dụng các tài nguyên cần thiết để sao chép và thay thế tệp. Lệnh sau thêm -n
và sẽ không sao chép tệp vào bất kỳ đích nào được liệt kê trong các đối số của câu lệnh echo, nếu tệp đã tồn tại trong đích đó.
echo ~/TextFiles/ ~/Dropbox /media/lori/MYUSBDRIVE | xargs -n 1 cp -n ~/Documents/FileToBeCopied.txt
Nhập man echo, man xargs hoặc man cp vào dòng lệnh trong Linux để biết thêm thông tin về bất kỳ lệnh nào trong số này.