时间戳示例:
20211018_14:54:54.0596445490_Mon
下面的 Ubuntu 20.04.3 命令有效,显示
- 目录和
- 文件和
- 隐藏文件:
权限、Time_Day、f 或 d、路径/文件名
find . -printf "%M %TY%Tm%Td_%TT_%Ta %Y%p\n" |sort -k2 ;
按时间排序,第 2 列。
最新文件在底部,4 个示例:
-rw-r--r-- 20211001_13:02:16.0000000000_Fri f./Bash/awkCommnads.txt
-rw-r--r-- 20211013_06:22:12.0000000000_Wed f./.HiddenFile_1.txt
drwxr-xr-x 20211018_14:51:42.1712136500_Mon d.
drwxr-xr-x 20211018_14:54:54.0596445490_Mon d./Bash
换句话说,
如何获取
按时间排序的上述列表左侧每个文件的 32 字节 md5sum 校验和?
示例:
123456789T123456789w123456789Y12 -rw-r--r-- 20211001_13:02:16.0000000000_Fri f./Bash/awkCommnads.txt
一旦 md5 起作用,然后 sha512sum。
测试提示:
setterm -linewrap off ; find . -printf "%M %TY%Tm%Td_%TT_%Ta %Y%p\n" |sort -k2 ; tput smam ;
为了测试,每条记录一行,不换行:
setterm -linewrap off ; Commands... ; tput smam ;
tput smam ; = 换行
再次,
使用按时间排序的列表,如何为每个文件插入校验和?
--
答案1
您需要md5sum
为每个文件(或者更确切地说是每个常规文件find
)。您可以使用运行任意命令-exec
。问题是find . -type f -exec md5sum {} \;
还会打印(即md5sum
会打印)路径名和尾随换行符,有时还会打印前导反斜杠。您需要在继续 之前删除它们-printf
。
一种直接的方法是使用cut
和。要在内部tr
执行,md5sum … | cut … | tr …
find
你需要一个 shell。对每个文件执行许多进程的成本很高。您不能使用,-exec … {} +
因为您需要md5sum
和-printf
轮流执行。如果我们设法让 shell 完成cut
和的工作,我们将节省一些进程tr
。
对于单个文件(例如/etc/fstab
),您可以按照所需格式打印其 md5sum,仍然不需要cut
或tr
,如下所示:
sh -c '
exec 2>/dev/null
sum="$(md5sum <"$1")" || sum="????????????????????????????????"
printf "%s " "${sum%% *}"
' sh /etc/fstab
考虑到性能,我们希望printf
这是您的内置命令sh
。上述命令旨在在md5sum
失败时显示问号。有用的链接:
现在让我们将命令构建到你的 中find
。像这样:
find . -exec sh -c '
exec 2>/dev/null
sum="$(md5sum <"$1")" || sum="????????????????????????????????"
printf "%s " "${sum%% *}"
' find-sh {} \; -printf '%M %TY%Tm%Td_%TT_%Ta %Y%p\n' | sort -k3
笔记:
sort -k2
成为了sort -k3
。该命令将尝试
md5sum
针对任何类型的文件运行。例如,针对目录md5sum
将失败,您将得到问号,这是可以接受的。另一方面,对于 fifomd5sum
可能会无休止地等待数据,这是您不想要的。考虑限制find
为常规文件(只需添加-type f
作为第一个测试)或修复命令,以便我们的-exec
操作仅针对常规文件:find . \( -type f -exec sh -c ' exec 2>/dev/null sum="$(md5sum <"$1")" || sum="????????????????????????????????" printf "%s " "${sum%% *}" ' find-sh {} \; -o -printf '-------------------------------- ' \) \ -printf '%M %TY%Tm%Td_%TT_%Ta %Y%p\n' | sort -k3
?
或字符的序列-
与任何 md5sum 的长度相同,因此它们可以很好地对齐。路径名中的换行符会使你感到困惑
sort
。如果可以,请使用以空字符结尾的字符串。例如,sort
在我的 Kubuntu 中使用 GNU:find … -printf '…\0' | sort -z … | tr '\0' '\n'