파일을 복사하고 타임 스탬프를 추가하십시오 -ra /home/bpacheco/Test1 /home/bpacheco/Test2-$(date +”%m-%d-%y-%T”) 위 Test2의

스크립트에 파일을 복사하고 이름에 타임 스탬프를 추가하는 두 가지 문제가 있습니다.

cp -ra /home/bpacheco/Test1 /home/bpacheco/Test2-$(date +"%m-%d-%y-%T")

Test2의 파일 이름으로 추가 하지만이 예제에서 이름이 원래 소스 파일의 파일 이름을 유지하고 싶습니다 Test.

cp -ra /home/bpacheco/Test1 /home/bpacheco/Test2-$(date +"%m-%d-%y-%r")

다른 문제는 %r타임 스탬프 코드를 대상 “PM”이 디렉토리가 아니라는 오류가 발생한다는 점입니다. 타임 스탬프를 12 시간 시계 시간으로 가져 오려고합니다.



답변

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