I am writing a bash program to sort photos from different folders in order of their modification date. I know how to list all the names of the files, but how can I get their modification dates as well?
Matthews-MacBook-Air-3:Q3 Matthew$ find . -name '*.jpg'
./MontrealTest/daves_images/mtl10.jpg
./MontrealTest/daves_images/mtl7.jpg
./MontrealTest/gregs_photos/mtl1.jpg
./MontrealTest/photos_by_harth/mtl11.jpg
./MontrealTest/photos_by_harth/mtl5.jpg
./MontrealTest/photos_by_harth/mtl9.jpg
./MontrealTest/sandeeps_collection/mtl4.jpg
./MontrealTest/sandeeps_collection/mtl8.jpg
./MontrealTest.jpg
./SimpleTest/dir1/fee.jpg
./SimpleTest/dir2/fum.jpg
./SimpleTest/dir3/foo.jpg
./SimpleTest/dir4/foe.jpg
Matthews-MacBook-Air-3:Q3 Matthew$
答案 0 :(得分:1)
这取决于您使用的find
版本(通常取决于您使用的操作系统)。如果find
支持-printf
原语,则可以执行以下操作(有关更多格式化选项,请参见man find
)
find . -name '*.jpg' -printf '%t %p\n'
如果您的find
不支持-printf
,则可以让它执行stat
来做同样的事情(再次,请参见man stat
以获得更多格式选项) :
find . -name '*.jpg' -exec stat -f '%Sm %N' {} +
答案 1 :(得分:0)
以任何文件的可读格式获取上次修改的日期/时间。
stat -c <format sequence> file
如果您希望以人类可读的形式使用格式序列,则格式可以是%y
或%z
或两者都用,如果您想在几秒钟内使用,则可以是%Y
或%Z
或两者都用自大纪元。
示例:
stat -c %y new_file.txt
示例输出:
2018-09-22 17:32:02.264570176 -0700
stat-c %Y new_file.txt
示例输出:
1537662722
来自man stat
-c --format =格式 使用指定的FORMAT而不是默认格式;每次使用FORMAT后输出换行符
上次数据修改的%y时间,人类可读
上次数据修改的%Y时间,自纪元以来的秒数
%z最后一次状态更改的时间,易于理解
%Z上次状态更改的时间,距离纪元以来的秒数
为了准确起见,请在运行find时读取变量中的文件,然后运行stat,虽然速度较慢,但更安全。