문제 중 하나는 명령 대체에 큰 따옴표를 생략했기 때문에 명령의 출력 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")"