231,在几千个文件夹层次结构中的文件有错误的(空?)创建和修改日期。我可以识别它们:
find . -mtime -0
他们的日期都在未来。不确定,但我看过的少数ls -l
似乎是在 2040 年。
无论如何,如果可能的话,我想首先在上述命令的输出中显示创建和修改日期。
其次,更重要的是,我想将这些文件的创建和修改日期更改为今天(现在)。
我不是一个 bash 大师,但我知道有一个简单的方法。提前致谢!
231,在几千个文件夹层次结构中的文件有错误的(空?)创建和修改日期。我可以识别它们:
find . -mtime -0
他们的日期都在未来。不确定,但我看过的少数ls -l
似乎是在 2040 年。
无论如何,如果可能的话,我想首先在上述命令的输出中显示创建和修改日期。
其次,更重要的是,我想将这些文件的创建和修改日期更改为今天(现在)。
我不是一个 bash 大师,但我知道有一个简单的方法。提前致谢!
我将使用“查找”如下并执行“触摸”来设置修改日期:
find . -mtime -0 -exec touch {} \;
不确定如何/是否可以更改创建日期。您可能必须通过将文件复制到一个新的临时名称来重新创建该文件,然后将其重命名为原始名称。GNU touch 在这里可能会有所帮助...
您可以使用“ls -Ul”作为文件创建日期,使用“ls -l”作为修改时间,如下所示:
find .-mtime -0 -exec ls -Ul {} \;
或者
find .-mtime -0 -exec ls -l {} \;
一个技巧是复制文件并将其移回原位。注意文件的所有权和模式,否则它会以更严重的方式破坏您的系统。
例如,这里的 fstab 时间戳错误:
$ stat /etc/fstab
File: '/etc/fstab'
Size: 37 Blocks: 8 IO Block: 4096 regular file
Device: b30ah/45834d Inode: 504 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 0/ user)
Access: 2105-12-20 17:23:10.624000001 +0000
Modify: 2018-07-31 00:29:37.000000000 +0000
Change: 2020-01-21 08:58:48.779991299 +0000
Birth: -
$ sudo cp /etc/fstab /etc/fstab_ --preserve=ownership --preserve=mode
$ sudo mv /etc/fstab_ /etc/fstab
$ stat /etc/fstab
File: '/etc/fstab'
Size: 37 Blocks: 8 IO Block: 4096 regular file
Device: b30ah/45834d Inode: 1534 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 1000/ user)
Access: 2020-02-06 16:52:33.684297747 +0000
Modify: 2020-02-06 16:52:33.684297747 +0000
Change: 2020-02-06 16:52:43.093550721 +0000
Birth: -
$
在 2 班轮命令集中,这将是:
$ sudo find / -type f -newermt 2020-02-07 -exec cp {} {}_ --preserve=ownership -preserve=mode \;
然后找到复制的文件并将它们移回原位
$ sudo find / -type f -iname "*_" -exec mv {}_ {} \;
您可以使用以下命令检查日期:
$ sudo find / -type f -newermt 2020-02-07
注意:作为尾随字符,我选择了“_”,请适应您的需要以避免文件系统中的任何冲突。