Bash 根据MacOS文件夹中的文件名更改创建和修改文件的日期和时间
我在文件夹中有很多文件,文件名如下Bash 根据MacOS文件夹中的文件名更改创建和修改文件的日期和时间,bash,macos,date,time,touch,Bash,Macos,Date,Time,Touch,我在文件夹中有很多文件,文件名如下 20190618_213557.mp4 20190620_231105.mp4 20190623_101654.mp4 .. 我需要根据文件名更改创建日期和时间 20190618_213557=YYYYMMDD_HHMMSS 在终端中使用bash脚本阅读以下内容:请注意,此问题和答案适用于Mac OS。在Linux中,大多数情况下没有文件创建时间 touch命令可以更改文件的创建日期。从man touch -t STAMP使用[[CC]YY]MMDDhhm
20190618_213557.mp4
20190620_231105.mp4
20190623_101654.mp4
..
我需要根据文件名更改创建日期和时间
20190618_213557=YYYYMMDD_HHMMSS
在终端中使用bash脚本阅读以下内容:请注意,此问题和答案适用于Mac OS。在Linux中,大多数情况下没有文件创建时间
touch
命令可以更改文件的创建日期。从man touch
-t STAMP
使用[[CC]YY]MMDDhhmm[.ss]
代替当前时间
因此,我们只需将您的格式YYYYMMDD\u hhmmss
转换为touch
的格式。这可以通过bash
的参数替换来完成。我们将子字符串YYYYMMDD
(${x:0:8}
)、hhmm
(${x:9:4}
)和ss
(${x:13:2}
)提取到一起
for i in *.mp4; do
touch -t "${x:0:8}${x:9:4}.${x:13:2}" "$i"
done
您可能感兴趣的触摸
更多选项:
-c
如果文件不存在,请不要创建该文件。-a
仅更改文件的访问时间。-m
更改[仅]文件的修改时间
但是,声称只有在指定日期早于当前创建日期的情况下,才会更改创建日期。如果是这种情况,并且您希望将时间更改为原始创建日期之后的时间,请使用
for i in *.mp4; do
SetFile -d "${x:4:2}/${x:6:2}/${x:0:4} ${x:9:2}:${x:11:2}:${x:13:2}" "$i"
done
SetFile
可能必须先安装。我在尝试从文件名设置日期时遇到了同样的问题,并且在这里建议的代码中遇到了很多困难
MACOS Uses touch -mt to change file creation/modification time. Here is the script:
#!/bin/bash
FILES="/Users/shakirzareen/Desktop/untitledfolder/*"
for f in $FILES ## f = full path + filename
do
t="${f##*/}" ##remove folder path from filename
t2="${t//_}" ##remove _ from filename
t3="${t2%%.*}" ##remove file extension part
touch -mt "$t3" $f ##set creation and modification time of file
done
必须小心使用相同的变量字母作为循环和括号<代码>我在。。。{x:4:2}应该是,因为我在。。。{i:4:2}
至少在mac上,并在完成之前以分号结束。此代码应适用于:
for i in *.mp4; do
SetFile -d "${i:4:2}/${i:6:2}/${i:0:4} ${i:9:2}:${i:11:2}:${i:13:2}" "$i";
done
您的命令不会更改文件的“创建时间”。文件没有“创建时间”,只有“访问时间”、“修改时间”和最后一次“inode更改”的时间,甚至最后一次“inode更改”的时间也不能修改。@user1934428虽然您的说法在Linux上可能是正确的,但OP将他们的问题标记为。在Mac OS上,文件有一个创建日期(称为出生日期)并且
touch
(有时)会更改这个日期——请参见答案。我认为没有创建时间的想法在所有Unix风格中都很常见(这个概念就是在这里出现的),而且由于MacOS的核心有BSD,我盲目地认为它也会存在。谢谢你指出这一点!看到我的答案了吗?如果是这样,我们将非常感谢您的支持/接受。如果没有,我很乐意听到问题出在哪里。您可以使用以下方法更改日期:t3=“20120101”t3=$(日期-j-f%Y%m%d-v-1400d$t3+%Y%m%d)echo$t3我的意思是:如何更改kMDItemDateAdded和kMDItemDateAdded\u ranking恐怕不行。互联网上有很多关于这个主题的帖子,但没有人给出更新kMDItemDateAdded的方法。附言:别忘了投票:)