有没有办法更改文件修改/创建的日期(在 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