目录中文件的 sha1sum

5 command-line bash scripts printing awk

我有一个脚本,它返回目录中每个文件的 sha1sum 以及文件的完整路径。

for i in /path/to/directory*.*; do sha1sum $i >> checksums.txt; done
Run Code Online (Sandbox Code Playgroud)

返回:

sha1sum  /path/to/directory/filename
sha1sum  /path/to/directory/filename2
sha1sum  /path/to/directory/filename3
Run Code Online (Sandbox Code Playgroud)

我如何修改它,使输出只包含 sha1sum 和文件名。我不想打印文件的完整路径。

我想使用sha1sum $i | awk '{print $1}'是要走的路,但我不知道如何只获取文件名

ste*_*ver 5

恕我直言,最简单的方法是首先在子shell中更改目录:

(cd /path/to/directory ; for i in *.*; do sha1sum "$i" ; done) >> checksums.txt
Run Code Online (Sandbox Code Playgroud)

请注意,*.*只匹配带有“点扩展名”的文件- 要校验所有文件,只需使用*


如果您选择走这awk条路线,那么一种方法是sub将最长的子串建立到/第二个字段的 a :

for i in /path/to/directory/*.*; do sha1sum $i ; done | awk '{sub(/.*\//,"",$2)} 1' >> checksums.txt
Run Code Online (Sandbox Code Playgroud)