linux中tfind函数,Find命令中的Linux LS -T输出

如果您的文件保证名称中没有换行符,请尝试:

find . -type f -printf '%T@ %p\n' | sort -rg | sed -E 's/[^ ]* //' | awk -F_ '{if (++dup[$1] >= 2) print}'

对于接受所有文件名的更强大的解决方案,请尝试(需要GNU工具):

find . -type f -printf '%T@ %p\0' | sort -rgz | sed -Ez 's/[^ ]* //' | awk -v RS="\0" -F_ '{if (++dup[$1] >= 2) print}'

如何运作

为了得到一个例子,让我们创建三个文件:

$ touch b_1

$ touch b_2

$ touch b_3

我们使用find打印文件的时间戳,后跟文件名:

$ find . -type f -printf '%T@ %p\n'

1511234577.7454717760 ./b_3

1511234574.9814419470 ./b_1

1511234576.1054540780 ./b_2

我们希望文件按时间戳,最新文件排序,因此我们使用sort -rg对时间戳进行数字反向排序(表示为自纪元以来的秒数):

$ find . -type f -printf '%T@ %p\n' | sort -rg

1511234577.7454717760 ./b_3

1511234576.1054540780 ./b_2

1511234574.9814419470 ./b_1

下一步是摆脱时间戳。所以,我们使用sed:

$ find . -type f -printf '%T@ %p\n' | sort -rg | sed -E 's/[^ ]* //'

./b_3

./b_2

./b_1

现在,我们可以使用您的awk脚本来识别旧文件:

$ find . -type f -printf '%T@ %p\n' | sort -rg | sed -E 's/[^ ]* //' | awk -F_ '{if (++dup[$1] >= 2) print}'

./b_2

./b_1

兼容性

很老的GNU系统不支持sed的-E选项。在此类系统上,可以将-E替换为-r,例如:

sed -r 's/[^ ]* //'

或者,对于更强大的版本:

sed -rz 's/[^ ]* //'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值