Hướng dẫn này sẽ dạy bạn dùng lệnh cp Linux – lệnh copy file từ thư mục này sang thư mục khác.
Linux là nền tảng ưa thích của nhiều lập trình viên. Nếu bạn mới với Linux, won't be long before you need to start copying files from one place to another – read on for an explanation of the Linux cp command and some tips and tricks on how to use it.
Lệnh cp
Lệnh cp có mục đích đơn giản – copy file và thư mục từ nơi này sang nơi khác.
Nó có thể làm điều này trên bất kỳ hệ thống file nào kết nối với hệ thống Linux và sẽ giữ file gốc trong khi cho bạn tùy chọn đổi tên và ghi đè file copy.
Cú pháp lệnh cp theo manual page là:
cp [OPTIONS] SOURCE DESTINATION
Tùy chọn lệnh cp
Khi nhập lệnh copy, bạn có thể chỉ định muốn làm gì với file đã tồn tại, và có bao gồm nội dung thư mục trong bản copy hay không. Dưới đây là một số tùy chọn thường dùng:
- -b Backup (tạo bản sao lưu mỗi file đích)
- -f Force (nếu file đích tồn tại không mở được, xóa nó và thử lại)
- -i Interactive (hỏi trước khi ghi đè)
- -n No-clobber (không ghi đè file đã tồn tại)
- -p Preserve (giữ mode, ownership, timestamps)
- -r Recursive (copy thư mục và nội dung bên trong)
- -u Update (chỉ copy khi file NGUỒN mới hơn file đích hoặc file đích thiếu)
- -v Verbose (giải thích đang làm gì)
Ví dụ lệnh copy file và thư mục dùng cp
Copy một file đơn
Chỉ cần nhập lệnh cp theo sau đường dẫn file nguồn và đích, cách nhau bởi một dấu cách:
cp /path/to/source/file.txt /path/to/destination/file.txt
Copy thư mục và nội dung bên trong
Nhập lệnh cp theo sau tùy chọn -r (recursive), và đường dẫn thư mục nguồn và đích, cách nhau bởi một dấu cách. Toàn bộ thư mục nguồn sẽ được copy đến thư mục đích, giữ tên gốc:
cp -r /path/to/source_directory /path/to/destination_directory
Copy nhiều file hoặc thư mục
Để copy nhiều file đến thư mục đích, chỉ cần liệt kê tất cả cách nhau bởi dấu cách – đường dẫn cuối cùng sẽ được coi là đích:
cp source_file_1.txt source_file_2.txt path/to/destination_directory
Bạn cũng có thể làm tương tự khi copy nhiều thư mục nếu truyền tùy chọn -r (Recursive):
cp -r source_directory_1/ source_directory_2/ /path/to/destination_directory
Để copy tất cả file và thư mục trong thư mục nguồn sang thư mục khác, bạn có thể dùng wildcard (*):
cp -r /path/to/source/* /path/to/destination
Copy file với tên hoặc extension cụ thể
Bạn có thể thêm mask tên file để copy file khớp tên hoặc extension dùng wildcard (*). Đây là cách copy mọi ảnh JPG từ thư mục nguồn đến thư mục đích:
cp /path/to/source/*.jpg /path/to/source/*.JPG /path/to/destination_directory
Copy file symlink
File symlink là file không chứa dữ liệu và chỉ là tham chiếu đến file khác trên đĩa. Chúng bị loại trừ mặc định khi dùng lệnh cp. Để bao gồm chúng dùng tùy chọn -d:
cp -d source_file_1.txt /path/to/destination_directory
Chỉ copy file mới dưới 7 ngày
Bạn có thể kết hợp lệnh cp với các lệnh khác để kiểm soát tốt hơn những gì bạn copy. Ví dụ này sẽ copy chỉ file dưới 7 ngày tuổi, bằng cách lọc chúng dùng lệnh find, rồi thực thi lệnh cp:
find /path/to/files* -mtime -7 -exec cp {} /mnt/nas/ \;
Xem kết quả copy
Bạn có thể xem nội dung thư mục đích dùng lệnh ls:
ls -hl /path/to/destination_directory
Kết luận
Copy file là tác vụ cần thiết hàng ngày và cú pháp sẽ nhanh chóng trở thành thiên nhiên. Cho các tác vụ dòng lệnh Linux phổ biến khác, xem các bài viết khác của chúng tôi.