将文件的“创建日期”和“上次修改时间”属性更改为另一个文件的

Jis*_*air 57 linux bash samba files

我正在使用合并上限从 15 个文件创建合并 pcap 文件。对于合并后的文件,我已将名称更改为 15 个文件中第一个的名称。但我也想将合并文件的属性(如“创建日期”和“上次修改时间”)更改为第一个的属性。有没有办法做到这一点?

FILES_dcn=($(find  $dir_dcn -maxdepth 1 -type f -name "*.pcap"  -print0 | xargs -0 ls -lt | tail -15 | awk '{print $9}'))
TAG1_dcn=$(basename "${FILES_dcn[14]}" | sed 's/.pcap//')
mergecap -w  "${dir_dcn}"/merge_dcn.pcap "${FILES_dcn[@]}"
mv  "${dir_dcn}"/merge_dcn.pcap  "${dir_dcn}"/"${TAG1_dcn}".pcap
Run Code Online (Sandbox Code Playgroud)

我尝试通过 samba 服务器(Ubuntu)访问合并的文件。以便提取器功能可以访问自动提取文件到 D 文件夹。但是由于合并文件的创建日期将更改,因此提取失败。有没有什么办法解决这一问题?

slm*_*slm 100

您可以使用该touch命令和-r开关将另一个文件的属性应用到一个文件。

注意: Unix 中没有创建日期这样的东西,只有访问、修改和更改。请参阅此 U&L 问答题:获取给定文件的年龄以获取更多详细信息。

$ touch -r goldenfile newfile
Run Code Online (Sandbox Code Playgroud)

例子

例如,这里有一个goldenfile使用任意时间戳创建的。

$ touch -d 20120101 goldenfile
$ ls -l goldenfile 
-rw-rw-r--. 1 saml saml 0 Jan  1  2012 goldenfile
Run Code Online (Sandbox Code Playgroud)

现在我制作了一些新文件:

$ touch newfile
$ ls -l newfile 
-rw-rw-r--. 1 saml saml 0 Mar  7 09:06 newfile
Run Code Online (Sandbox Code Playgroud)

现在将 applygoldenfile的属性应用于newfile.

$ touch -r goldenfile newfile 
$ ls -l goldenfile newfile
-rw-rw-r--. 1 saml saml 0 Jan  1  2012 newfile
-rw-rw-r--. 1 saml saml 0 Jan  1  2012 goldenfile
Run Code Online (Sandbox Code Playgroud)

现在newfile具有相同的属性。

通过 Samba 修改

我刚刚确认我可以使用我的 Fedora 19 笔记本电脑执行此操作,其中包括连接到 Thecus N12000 NAS(使用 CentOS 5.x 的修改版本)的 1.16.3-2 版。

正如我上面提到的,我能够触摸一个文件,它按我的描述工作。您的问题可能与正在使用的安装选项有关,这可能会忽略对某些时间属性的跟踪,或者可能与以下错误之一有关:

  • 许多文件系统现在支持文件创建时间。对于ext4,你可以通过`debugfs`来查看/更改它(虽然这需要root权限,这里没有用)。看到这个问题 - http://unix.stackexchange.com/questions/50177/birth-is-empty-on-ext4 (2认同)
  • 虽然 Linux 不支持创建时间,但 Samba 共享可以。根据您的设置方式(以及文件系统中的 xattr 支持),Samba 能够在 Linux xattr 中存储一些时间戳。这意味着它可能能够做底层文件系统不能做的事情——比如报告一个有效的(可修改的)创建时间。抱歉,我没有找到有关其工作原理的任何好的链接。 (2认同)
  • 实际上大多数 Linux 文件系统(例如 ext4)现在支持创建日期,Linux 4.11 将有一个 `statx()` 调用来检索它。最后。 (2认同)

Jad*_*eye 52

最简单的方法 - 访问修改将是相同的:

touch -a -m -t 201512180130.09 fileName.ext
Run Code Online (Sandbox Code Playgroud)

在哪里:

-a = accessed
-m = modified
-t  = timestamp - use [[CC]YY]MMDDhhmm[.ss] time format
Run Code Online (Sandbox Code Playgroud)

如果你想使用NOW只是删除t和时间戳

要验证它们是否相同: stat fileName.ext

参见:触摸人

  • 在 ubuntu 14.04 上以某种方式在 `-m` 之前放置 `-a` 不会修改访问时间......把它放在后面,所以:`touch -m -a -t ....` (8认同)
  • `-d time_string` 可能比 `-t` 更简单:-d "2004-02-29 16:21:42" (6认同)