파일의 수정/생성 날짜를 어떻게 변경할 수 있나요?

파일의 수정/생성 날짜를 어떻게 변경할 수 있나요?

파일이 수정/생성된 날짜를 변경하는 방법이 있습니까(노틸러스 또는 ls -l 명령을 사용하여 표시됨)? 이상적으로는 전체 파일의 날짜/타임 스탬프를 특정 시간 이전 또는 이후(예: +8시간 또는 -4일 등)로 변경할 수 있는 명령을 찾고 있습니다.

답변1

파일(또는 루트)의 소유자인 경우 다음 touch명령을 사용하여 파일 수정 시간을 변경할 수 있습니다.

touch filename

-d기본적으로 이는 파일의 수정 시간을 현재 시간으로 설정하지만 특정 날짜를 선택하는 플래그 와 같은 여러 플래그가 있습니다 . 예를 들어 현재보다 2시간 전에 파일이 수정되도록 설정하려면 다음을 사용할 수 있습니다.

touch -d "2 hours ago" filename

대신 기존 수정 시간을 기준으로 파일을 수정하려면 다음을 수행해야 합니다.

touch -d "$(date -R -r filename) - 2 hours" filename

많은 수의 파일을 수정하려면 다음을 사용할 수 있습니다.

find DIRECTORY -print | while read filename; do
    # do whatever you want with the file
    touch -d "$(date -R -r "$filename") - 2 hours" "$filename"
done

find관심 있는 파일만 선택하도록 인수를 변경할 수 있습니다 . 현재 시간을 기준으로 파일 수정 시간만 업데이트하려는 경우 다음과 같이 단순화할 수 있습니다.

find DIRECTORY -exec touch -d "2 hours ago" {} +

이 형식은 셸을 사용하여 touch.

생성 시간이 지남에 따라 대부분의 Linux 파일 시스템은 이 값을 추적하지 않습니다. 파일과 관련된 항목이 있지만 ctime파일 메타데이터가 마지막으로 변경된 시기를 추적합니다. 파일의 권한이 변경되지 않은 경우 생성 시간이 유지될 수 있지만 이는 우연의 일치입니다. 파일 수정 시간을 명시적으로 변경하는 것은 메타데이터 변경으로 간주되므로 ctime.

답변2

가장 쉬운 방법 - 액세스 및 수정은 동일합니다.

touch -a -m -t 201512180130.09 fileName.ext

어디:

-a = accessed
-m = modified
-t = timestamp - use [[CC]YY]MMDDhhmm[.ss] time format

사용하려면 및 타임스탬프를 NOW삭제하세요 -t.

모두 동일한지 확인하려면 다음을 수행하세요. stat fileName.ext

보다:남자 터치

답변3

도와 주셔서 감사합니다. 이것은 나에게 효과적이었습니다.

터미널에서 날짜 편집 디렉터리로 이동합니다. 그런 다음 다음을 입력합니다.

find -print | while read filename; do
    # do whatever you want with the file
    touch -t 201203101513 "$filename"
done

마지막으로 -> "완료"를 제외하고 Enter 키를 누르면 ">"가 표시됩니다.

참고: "201203101513"을 변경할 수 있습니다.

"201203101513" =은 이 디렉토리의 모든 파일에 대해 원하는 날짜입니다.

답변4

이 작은 스크립트는 적어도 나에게는 작동합니다.

#!/bin/bash

# find specific files
files=$(find . -type f -name '*.JPG')

# use newline as file separator (handle spaces in filenames)
IFS=$'\n'

for f in ${files}
do
 # read file modification date using stat as seconds
 # adjust date backwards (1 month) using date and print in correct format 
 # change file time using touch
 touch -t $(date -v -1m -r $(stat -f %m  "${f}") +%Y%m%d%H%M.%S) "${f}"
done

관련 정보