หนึ่งในปัญหาของคุณคือคุณทิ้งเครื่องหมายคำพูดคู่ไว้รอบ ๆ การทดแทนคำสั่งดังนั้นผลลัพธ์จากdate
คำสั่งจะถูกแยกที่ช่องว่าง ดูเหตุใดเชลล์สคริปต์ของฉันจึงสำลักช่องว่างหรืออักขระพิเศษอื่น ๆ นี่เป็นคำสั่งที่ถูกต้อง:
cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%m-%d-%y-%r")"
หากคุณต้องการต่อท้ายชื่อไฟล์ดั้งเดิมคุณต้องมีชื่อนั้นในตัวแปร
source=/home/bpacheco/Test1
cp -a -- "$source" "$source-$(date +"%m-%d-%y-%r")"
หากคุณกำลังใช้ bash คุณสามารถใช้การขยายรั้งแทน
cp -a /home/bpacheco/Test1{,"-$(date +"%m-%d-%y-%r")"}
หากคุณต้องการคัดลอกไฟล์ไปยังไดเรกทอรีอื่นและผนวกเวลาประทับลงในชื่อไฟล์ต้นฉบับคุณสามารถทำได้ด้วยวิธีนี้ - ${source##*/}
ขยายเป็นค่าที่source
ไม่มีส่วนจนถึงสุดท้าย/
(จะลบส่วนนำที่ยาวที่สุดที่ตรงกับรูปแบบ*/
):
source=/home/bpacheco/Test1
cp -a -- "$source" "/destination/directory/${source##*/}-$(date +"%m-%d-%y-%r")"
ถ้าTest1
เป็นไดเรกทอรีมันจะถูกคัดลอกซ้ำและไฟล์ภายในไดเรกทอรีนั้นจะเก็บชื่อไว้: เฉพาะไดเรกทอรีระดับบนสุดเท่านั้นที่จะได้รับการบันทึกเวลาต่อท้าย (เช่นTest1/foo
คัดลอกไปยังTest1-05-10-15-07:19:42 PM
) หากคุณต้องการเพิ่มการประทับเวลาให้กับชื่อไฟล์ทั้งหมดนั่นเป็นปัญหาที่แตกต่างออกไป
รูปแบบการประทับเวลาที่คุณเลือกเป็นแนวคิดที่ไม่ดี: มันยากที่จะอ่านสำหรับมนุษย์และยากต่อการจัดเรียง คุณควรใช้รูปแบบที่อ่านง่ายขึ้นและสามารถเรียงได้ง่ายเช่นส่วนต่าง ๆ ในลำดับความสำคัญลดลง: ปี, เดือน, วัน, ชั่วโมง, นาที, วินาทีและแยกจากส่วนวันที่และส่วนเวลา
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")"