3

231,在几千个文件夹层次结构中的文件有错误的(空?)创建和修改日期。我可以识别它们:

find . -mtime -0

他们的日期都在未来。不确定,但我看过的少数ls -l 似乎是在 2040 年。

无论如何,如果可能的话,我想首先在上述命令的输出中显示创建和修改日期。

其次,更重要的是,我想将这些文件的创建和修改日期更改为今天(现在)。

我不是一个 bash 大师,但我知道有一个简单的方法。提前致谢!

4

2 回答 2

2

我将使用“查找”如下并执行“触摸”来设置修改日期:

find . -mtime -0 -exec touch {} \;

不确定如何/是否可以更改创建日期。您可能必须通过将文件复制到一个新的临时名称来重新创建该文件,然后将其重命名为原始名称。GNU touch 在这里可能会有所帮助...

您可以使用“ls -Ul”作为文件创建日期,使用“ls -l”作为修改时间,如下所示:

find .-mtime -0 -exec ls -Ul {} \;

或者

find .-mtime -0 -exec ls -l {} \;
于 2013-10-24T16:55:28.250 回答
0

一个技巧是复制文件并将其移回原位。注意文件的所有权和模式,否则它会以更严重的方式破坏您的系统。

例如,这里的 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

注意:作为尾随字符,我选择了“_”,请适应您的需要以避免文件系统中的任何冲突。

于 2020-02-06T17:12:13.217 回答