如何更改文件的修改/创建日期?

如何更改文件的修改/创建日期?

有没有办法更改文件修改/创建的日期(在 Nautilus 中显示或使用 ls -l 命令)?理想情况下,我正在寻找一个命令,它可以将一大堆文件的日期/时间戳更改为早或晚的某个时间量(例如 +8 小时或 -4 天等)。

答案1

只要您是文件的所有者(或根用户),您就可以使用以下命令更改文件的修改时间touch

touch filename

默认情况下,这会将文件的修改时间设置为当前时间,但有许多标志,例如-d用于选择特定日期的标志。例如,要将文件设置为在当前时间前两小时修改,您可以使用以下命令:

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" {} +

这种形式在文件时间相对版本中是不可能的,因为它使用 shell 来形成 的参数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

谢谢您的帮助。这对我有用:

在终端中,转到 date-edit 目录。然后输入:

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

按下回车键后,你会看到一个“>”,除了最后一次 ->“完成”。

注意:您可能需要更改“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

相关内容