파일을 복사하고 이름에 타임스탬프를 추가하는 스크립트에 두 가지 문제가 있습니다.
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시간 타임스탬프를 얻으려고 합니다.
답변1
문제 중 하나는 명령 대체 주위에 큰따옴표가 없어서 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")"
답변2
원본 파일 이름이 test1.txt인 경우 이 복사 문은 파일을 복사하고 날짜-시간 스탬프를 현재 디렉터리의 원본 파일 이름에 연결합니다.
cp test1.txt{,.$(날짜+%Y%m%d%H%m%s)}
다른 사람들이 제안한 것처럼 "%r"을 사용하여 동일한 형식 문자열("+" 다음 부분)을 사용할 수 있지만 +r에 의해 생성된 시간 형식은 "HH:MM:SS AM|PM"이고 저는 그렇지 않습니다. 포함된 공백이나 콜론과 같습니다.
저작자 표시: 이것은 제가 직접 만든 것이 아니며 어딘가의 댓글, 관련 없는 주제에 대한 댓글에서 발견했습니다.