파일이 수정/생성된 날짜를 변경하는 방법이 있습니까(노틸러스 또는 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