Một trong những vấn đề của bạn là bạn đã bỏ qua dấu ngoặc kép xung quanh thay thế lệnh, do đó đầu ra từ date
lệnh được phân tách tại các khoảng trắng. Xem tại sao tập lệnh shell của tôi bị nghẹt trên khoảng trắng hoặc các ký tự đặc biệt khác? Đây là một lệnh hợp lệ:
cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%m-%d-%y-%r")"
Nếu bạn muốn thêm vào tên tệp gốc, bạn cần phải có tên đó trong một biến.
source=/home/bpacheco/Test1
cp -a -- "$source" "$source-$(date +"%m-%d-%y-%r")"
Nếu bạn đang sử dụng bash, bạn có thể sử dụng mở rộng nẹp thay thế.
cp -a /home/bpacheco/Test1{,"-$(date +"%m-%d-%y-%r")"}
Nếu bạn muốn sao chép tệp vào một thư mục khác và nối dấu thời gian vào tên tệp gốc, bạn có thể thực hiện theo cách này - ${source##*/}
mở rộng đến giá trị source
mà không có phần cuối cùng /
(nó loại bỏ tiền tố dài nhất phù hợp với mẫu */
):
source=/home/bpacheco/Test1
cp -a -- "$source" "/destination/directory/${source##*/}-$(date +"%m-%d-%y-%r")"
Nếu Test1
là một thư mục, nó được sao chép đệ quy và các tệp trong thư mục giữ tên của chúng: chỉ thư mục toplevel được thêm dấu thời gian (ví dụ: Test1/foo
được sao chép vào Test1-05-10-15-07:19:42 PM
). Nếu bạn muốn nối dấu thời gian cho tất cả các tên tệp, đó là một vấn đề khác.
Sự lựa chọn định dạng dấu thời gian của bạn là một ý tưởng tồi: thật khó đọc đối với con người và khó sắp xếp. Bạn nên sử dụng một định dạng dễ đọc hơn và có thể được sắp xếp dễ dàng, nghĩa là với các phần theo thứ tự quan trọng giảm dần: năm, tháng, ngày, giờ, phút, giây và với sự tách biệt giữa phần ngày và phần thời gian.
cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%Y%m%d-%H%M%S")"
cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%Y-%m-%dT%H%M%S%:z")"