보존하고 싶은 수정 타임스탬프가 있는 수백 개의 폴더가 있습니다. 이제 파일을 복사해야 합니다.
이 방법만 빼고...
timestamp=$(stat -c %y /foldername)
cp /tmp/file.jpg /foldername/file.jpg
touch -d "$timestamp" /foldername
...폴더 수정 타임스탬프를 억제하는 더 좋은 방법이 있습니까?
답변1
touch -r
또 다른 방법은 .in 을 사용하는 것입니다 zsh
:
() {
touch -r $2:h -- $3 && cp -T -- $2 $3 && touch -r $3 -- $2:h
} /tmp/file.jpg /foldername/file.jpg =(:)
=(:)
익명 함수가 종료된 후 즉시 삭제되는 빈 임시 파일을 생성합니다 . -T
(강제 cp
로에게 복사그리고 결코에게 복사)은 GNU 확장입니다.
또는 make는 추가 옵션을 다음으로 전달할 수 있는 함수입니다 cp
.
copy_while_preserving_mtime_of_target_directory() {
# Usage: ... [cp options] source dest
() {
touch -r "$@[-1]:h" -- "$1" &&
cp -T "$@[2,-1]" &&
touch -r "$1" -- "$@[-1]:h"
} =(:) "$@"
}
또 다른 접근 방식은 임의의 셸 코드를 인수로 받아들이고 저장 및 복원 디렉터리의 mtime 내용으로 실행을 래핑하는 일부 함수일 수 있습니다.
run_while_preserving_mtime_of() {
# Usage: ... directory shell-code
() {
touch -r "$2" -- "$1" || return
{
eval -- "$@[3,-1]"
} always {
touch -r "$1" -- "$2"
}
} =(:) "$@"
}
다음과 같이 사용됩니다:
run_while_preserving_mtime_of /foldername '
cp /tmp/file.jpg /foldername/file.jpg
'
예를 들어.