我从PC或笔记本电脑复制到USB驱动器的文件的时间戳有问题:原始文件的最后修改时间与复制文件的最后修改时间不同。因此,在PC和USB驱动器之间同步文件非常麻烦。
逐步说明
我可以使用GUI或命令将任意文件从PC /笔记本电脑复制到USB驱动器
cp -a file.txt /media/gabor/CORSAIR/
我检查了原始文件的最后修改时间:
$ ls -l --time-style=full-iso file.txt -rw-rw-r-- 1 gabor gabor 0 2018-09-22 15:09:23.317098281 +0200 file.txt
我检查复制文件的最后修改时间:
$ ls -l --time-style=full-iso /media/gabor/CORSAIR/file.txt -rw-r--r-- 1 gabor gabor 0 2018-09-22 15:09:23.000000000 +0200 /media/gabor/CORSAIR/file.txt
如您所见,复制文件的最后修改时间中的秒数被截断为零个十进制数字。但是,如果我输入命令
if ! [ file.txt -nt /media/gabor/CORSAIR/file.txt ] && ! [ file.txt -ot /media/gabor/CORSAIR/file.txt ]; then echo "The last modification times are equal."; fi
我得到了输出 The last modification times are equal.
如果卸载并重新安装USB驱动器,然后再次执行最后两个命令,情况将发生变化:
$ ls -l --time-style=full-iso /media/gabor/CORSAIR/file.txt -rw-r--r-- 1 gabor gabor 0 2018-09-22 15:09:22.000000000 +0200 /media/gabor/CORSAIR/file.txt $ if [ file.txt -nt /media/gabor/CORSAIR/file.txt ]; then echo "The file is newer on the PC."; fi The file is newer on the PC.
因此,重新安装后,复制文件的最后修改时间将进一步减少一秒钟。但是,进一步的卸载和重新安装不再影响最后的修改时间。此外,对文件的测试现在表明PC上的文件是较新的(尽管不是)。
由于文件的最后修改时间在我的PC和笔记本电脑上显示的方式不同,因此情况变得更加复杂,尽管在我的PC和笔记本电脑上的日期和时间设置相同,但差异恰好是2小时!
更多信息
我的PC和笔记本电脑都显示了上述行为。我的PC上有Ubuntu 14.04.5(可信任),笔记本电脑上有Ubuntu 16.04.2(xenial)。
我的USB驱动器具有vfat文件系统。mount | grep CORSAIR
我PC上的输出是
/dev/sdb1 on /media/gabor/CORSAIR type vfat (rw,nosuid,nodev,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush,uhelper=udisks2)
mount | grep CORSAIR
我的笔记本电脑上的输出是
/dev/sdb1 on /media/gabor/CORSAIR type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)
我的其他USB驱动器显示相同的行为。
题
能否以某种方式消除上次修改时间的差异?例如,在安装/卸载时使用其他参数?还是Ubuntu中的错误?
我想实现原始文件和复制文件的时间戳完全相同,以便可以更高效地完成同步。另外,我想将vfat文件系统保留在USB驱动器上,以便也可以在Windows下使用它们。
ext4
文件系统?(Linux对Microsoft专有文件系统,FAT32,exFAT,NTFS的支持有一些限制。)请参阅此链接,它不仅建议ext4
而且还udf
可以替代Microsoft专有文件系统。