Khi bạn cần sao chép nội dung của một thư mục sang một thư mục khác, trong trường hợp của Linux, có rất nhiều công cụ cho bạn sử dụng. Cái nào để sử dụng? Nó phụ thuộc vào tình hình và sở thích cá nhân. Trong bài viết này, chúng ta sẽ xem xét các cách bạn có thể sao chép nội dung tệp từ thư mục này sang thư mục khác trong terminal. Nó sẽ có một số lựa chọn phổ biến cho các tình huống khác nhau.

Sao chép file trong terminal

Sao chép nội dung của một thư mục vào một thư mục khác là một công việc rất đơn giản. Tuy nhiên, bạn có rất nhiều lựa chọn để làm điều đó. Linux được tích hợp với nhiều công cụ để thao tác các file và thư mục thông qua các hành động khác nhau.

Tất cả các bước dưới đây được thực hiện trên Ubuntu 18.04.1. Đầu tiên, hãy tạo một thư mục để làm việc.

mkdir -v dir_A

Bây giờ, hãy tạo các tệp giả bằng cách sử dụng touch.

touch dummy{ 1 .. 10 }

Hãy tạo một thư mục khác trong dir_A với một số tệp test.

mkdir -v dir_B
touch dummy{1..10}

Bây giờ, toàn bộ cấu trúc của thư mục dir_A trông như thế này.

tree dir_A

Lệnh Cp

Các cp lệnh là, cho đến nay, các công cụ phổ biến nhất cho việc sao chép tập tin. Đó là một công cụ mặc định đi kèm với bất kỳ hệ thống Linux nào. Sao chép file và thư mục là mục đích duy nhất của cp. Nó hỗ trợ một loạt các tính năng.

Đây là cấu trúc cơ bản của lệnh cp .

cp <tùy chọn> <nguồn> <đích>

Ví dụ, hãy tạo một bản sao của file dummy1 với tên dummy1_copy .

cp dummy1 dummy1_copy

Bây giờ, hãy thử sao chép nhiều file cùng một lúc. Đối với một hoạt động như vậy, cp yêu cầu đích là một thư mục. Ở đây, tôi sẽ sử dụng biểu thức ký tự đại diện để lấy tất cả các tệp dummy và đưa chúng vào thư mục ~/Downloads .

cp dummy * ~/Downloads

Làm thế nào về việc sao chép một thư mục?

cp -vr dir_A dir_A_copy

Ở đây, tôi đã sử dụng hai flag khác nhau. Hãy phân tích nhanh về chúng.

  • -r: Viết tắt của recursive (đệ quy) bao gồm bất kỳ (các) tệp ẩn nào. Tùy chọn này phải có nếu sao chép liên quan đến toàn bộ thư mục hoặc nhiều hơn.
  • -v: Viết tắt của từ verbose . Công cụ cp sẽ hiển thị ra mọi hành động mà nó đang thực hiện.

Muốn follow các symbolic links? Thêm flag “-L”.

cp -Lvr <nguồn> <đích>

Giả sử thư mục đích đã có một file có cùng tên. Nếu bạn muốn tránh ghi đè, hãy sử dụng flag “-n”. Nó sẽ đảm bảo rằng trong trường hợp xung đột, cp sẽ không ghi đè lên tệp.

cp -nv <nguồn> <đích>

Nếu bạn đang thực hiện một hành động sao chép / dán nhạy cảm, tốt hơn là bạn nên có quyền kiểm soát tốt nhất đối với những gì xảy ra, phải không? Trong trường hợp này, hãy sử dụng flag “-i”. Nó là viết tắt của một chế độ tương tác, nơi cp sẽ yêu cầu xác nhận mỗi khi xung đột phát sinh.

cp -i <nguồn> <đích>

Nếu bạn quan tâm hơn, lệnh man luôn là một trong những tài liệu tốt nhất. Tìm hiểu thêm về cp.

man cp

lệnh mv

Công cụ mv tương tự như công cụ cp. Tuy nhiên, thay vì sao chép, mv di chuyển các file và thư mục. So với cp, nó đơn giản hơn.

Cấu trúc lệnh của mv tương tự như cp.

mv <tùy chọn> <nguồn> <đích>

Để chuyển nội dung của dir_A sang dir_A_copy , hãy chạy lệnh sau.

mv -v dir_A / dir_A_copy

Ở đây, flag “-v” dành cho verbose mode . Nếu bạn chỉ muốn di chuyển nội dung của dir_A, hãy sử dụng nội dung sau để thay thế. Trong trường hợp này, thư mục đích phải tồn tại trước.

mv -v dir_A / * dir_A_copy

Công cụ mv không có nhiều thứ để làm. Đối với tất cả các tùy chọn có sẵn, hãy xem qua bằng lệnh man.

man mv

Lệnh Rsync

Đây là một trong những công cụ phổ biến và mạnh mẽ nhất để sao chép file, được sử dụng chủ yếu để sao lưu. Nó có khả năng sao chép tệp qua kết nối từ xa. Không giống như cp và mv, nó cũng đi kèm với rất nhiều tùy chọn sao chép tệp nâng cao cung cấp khả năng tùy chỉnh tối đa cho hành vi của nó.

Rsync chủ yếu nổi tiếng với thuật toán truyền delta giúp giảm đáng kể lượng dữ liệu cần trao đổi. Trong trường hợp đồng bộ hóa từ xa, điều này giúp tiết kiệm rất nhiều băng thông.

Rsync thường không được cài đặt sẵn trong bất kỳ bản phân phối Linux nào. Tuy nhiên, vì sự phổ biến của nó, nó hiện có sẵn trên tất cả các bản phân phối Linux chính. Sử dụng Pkgs.org để tìm ra gói rsync cho bản phân phối của bạn. Giả sử rằng bạn đã cài đặt rsync, hãy bắt đầu.

Đầu tiên, cấu trúc lệnh cơ bản của rsync. Nó khá giống với cp.

rsync <tùy chọn> <nguồn> <đích>

Trước khi bắt đầu, đây là một số tham số rsync phổ biến.

  • -v : Chế độ chi tiết (verbose), xuất ra bất kỳ hành động nào đang được thực hiện trên màn hình điều khiển.
  • -vv : Chế độ chi tiết với nhiều chi tiết hơn
  • -r : Chế độ đệ quy(recursive), phải có nếu sao chép thư mục
  • -z : Nén dữ liệu
  • -a : Lưu trữ dữ liệu
  • -n : Chạy khô (dry run), nên chạy kết hợp với chế độ tiết. Đơn giản chỉ cần xuất ra các hành động nếu lệnh chạy thực.
  • –Delete : Xóa (các) tệp và (các) thư mục trên thư mục đích nếu thư mục nguồn không còn chứa chúng nữa
  • -no-whole-file : Buộc rsync sử dụng thuật toán truyền delta của nó, bất kể điều gì. Hữu ích trong các tình huống mà bạn phải đảm bảo ghi ít dữ liệu nhất.
  • –Remove-source-file : Xóa (các) tệp nguồn sau khi sao chép.

Hãy kiểm tra chúng trong hành động. Đầu tiên, bản sao thư mục. Chạy lệnh sau.

rsync -vr dir_A/ dir_A_copy

Để có đầu ra chi tiết hơn, hãy sử dụng flag “-vv”.

rsync -vv -r dir_A/ dir_A_copy

Bây giờ, chúng ta hãy kiểm tra phần thú vị của rsync. Chúng ta đã thảo luận về cách rsync chỉ sao chép một cách thông minh các tệp được sửa đổi, tiết kiệm băng thông và ghi đĩa. Đã đến lúc kiểm tra nó. Trong ví dụ này, hành động sẽ được thực hiện trong thư mục dir_A .

rsync -vv --no-whole-file dummy* dir_B/

Mặc dù đã bật tính năng truyền delta, rsync có thể không áp dụng nó khi bạn đang thực hiện truyền dữ liệu ở local.

Bây giờ, chúng ta hãy kiểm tra tính năng dry run. Trước khi chạy bất kỳ lệnh rsync nào thực sự, điều quan trọng là bạn phải kiểm tra nó trước. Đây là lúc dry run xuất hiện. Rsync sẽ xuất ra những gì sẽ xảy ra nếu lệnh thực sự chạy.

rsync -anvr dir_A/ dir_A_copy

Rsync cũng có thể hoạt động với các thư mục từ xa, không vấn đề gì. Tất cả những gì nó cần là kết nối SSH thích hợp với các khóa SSH được định cấu hình.

rsync <option> <local_dir> <tên người dùng>@<remote_host>:<destination_dir>

Bạn muốn thực hiện một thao tác di chuyển? Để đạt được điều đó trong quan điểm của rsync, rsync sẽ sao chép nội dung của thư mục nguồn và sau đó, xóa nội dung nguồn.

rsync -v --remove-source-files <source> <destination>

Tổng kết

Cp và rsync là những công cụ phổ biến nhất mà bạn có thể sử dụng để sao chép các tệp trong một thư mục trên thiết bị đầu cuối Linux. Cả hai lệnh này cũng thực sự tốt cho việc viết script. Chỉ cần đảm bảo kiểm tra các chức năng trước khi thực hiện.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments