当将命令‘touch’应用于目录时会发生什么?
$ mkdir test
$ ls -l test
drwxrwxr-x 2 dragos dragos 4096 Oct 27 18:08 test
$ touch test
$ ls -l
drwxrwxr-x 2 dragos dragos 4096 Oct 27 18:08 test
答案1
答案2
顶部的例子没有清楚地说明“touch”设置了目录的时间(列表中的新时间与原始时间相同,仅仅是因为 touch 是在目录创建后不久发生的)...是的,“FILE”的定义在文档中确实包括目录,所以您可以使用 touch 来更改它们的时间戳,但是......
在某些情况下,即使您有权限执行其他任何操作,也无法更改目录的时间戳(对于某些类型的远程挂载目录)。例如此 NFS 挂载:
$ touch -d "2014-07-02 12:15" /public/test.dir
touch: setting times of ‘/public/test.dir’: Operation not permitted
此外,您可能会遇到某些服务器不支持某些旧日期的问题,例如:
$ mkdir /Acer/kopies/test.dir
$ ls -ald /Acer/kopies/test.dir
drwxr-xr-x 2 mark aitchison 0 Mar 11 17:40 /Acer/kopies/test.dir
这有效:
$ touch "2014-04-01 00:00" /Acer/kopies/test.dir
$ ls -ald /Acer/kopies/test.dir
drwxr-xr-x 2 mark aitchison 0 Apr 1 2014 /Acer/kopies/test.dir
这可以在本地目录下工作但在 Samba 挂载下会给出一个奇怪的日期:
$ touch -d "1955-07-02 12:15" /Acer/kopies/test.dir
$ ls -ald /Acer/kopies/test.dir
drwxr-xr-x 2 mark aitchison 0 Nov 26 60410 /Acer/kopies/test.dir
~~~~~~~~~~~~~
答案3
touch
是一个标准的 Unix 程序,用于更改文件的访问和修改时间戳。它还用于创建新的空文件。单一 Unix 规范 (SUS) 规定 touch 应更改文件的访问时间、修改时间或两者。文件由作为单个参数提供的路径名标识。它还规定,如果标识的文件不存在,则创建该文件并按指定设置访问和修改时间。如果没有指定新的时间戳,touch 将使用当前时间。
-维基百科
您可以使用以下命令找到有关该touch
命令(或您想要了解的任何其他命令)的更多详细信息:man
man touch
答案4
出现该问题的直接原因是,默认时间分辨率ls -l
以分钟为单位,因此在同一分钟内触及的文件系统条目将在默认输出中完全相同地显示ls -l
。
解决方案如下:https://superuser.com/questions/355318/how-to-have-linux-ls-command-show-second-in-time-stamp
并且基本上改为运行ls -l --time-style=full-iso
。