我有一个文件夹,其中有数千张图像。在这数千张图像中,我想将所有“上次创建”和“上次修改”属性完全相同的图像聚集在一起。 (换句话说,我想分离所有我从未重命名过的图像)
有没有办法从终端执行此操作?
这是我想要连接的两个命令 LS-TU按创建日期列出文件。 (我用的是Mac) ls-lt按修改日期列出文件
这样我想 “列出创建日期 = 修改日期的文件”
答案1
您可以使用该stat
命令来执行此操作。这是一个简单的脚本,它打印文件名,并允许嵌入空白:
#!/bin/sh
find $* -exec stat -f '%m %B %N' {} \; | \
awk '$1 == $2 { \
s=length($1)+length($2)+3;
$0 = substr($0,s);
print $0;
}'
和分别%m
是%B
修改的和出生次(这似乎是所问的)。该脚本将这些数字打印为十进制数字,然后传递给awk
该数字,然后仅打印这些数字相同的行。由于您的文件名可能嵌入了空格,因此脚本的其余部分将从输入中删除时间戳值并打印该行的其余部分。
进一步阅读:
答案2
我觉得很无聊,而且我也使用这样的脚本,所以我以一些小方式改变了 Thomas Dickey 的脚本,不是以任何剧烈的方式,而是只是例如,以便您可以处理各种文件名(甚至是带有换行符的文件名)并轻松更改文件名之间的分隔符(例如只需设置ORS
为"\0"
将其转发到xargs -z …
)
#!/bin/sh
find "${1-.}" -type f -exec stat --printf '%n\0%Y %W\0' -- {} \; | \
awk 'BEGIN {
RS = "\0";
FS = " ";
ORS = "\n";
} {
if (NR % 2) {
f = $0;
} else if ($1 == $2) {
print f;
}
}'
不完全是 POSIX 因为例如--printf
。