我正在执行一项任务,我被要求查找特定大小和sha1sum之间的文件。我特别要求以下列格式提供输出:
文件名Sha1文件大小
全部在一条线上。我无法创建其他文件。
我尝试过以下方法:
for listed in $(find /my/output -type f -size -20000c):
do
sha1sum "$listed" | awk '{print $1}'
ls -l "$listed" | awk '{print $9 $5}'
done
给了我所需的输出字段,但不是所要求的格式,即
sha1sum
filename filesize
有人能提出一种方式,让我能够在一条线上获得所有这些吗?
谢谢:)
答案 0 :(得分:1)
使用单一管道:
find /my/path-type f -size -20000c -printf "%s " -exec sha1sum {} \; | awk '{ print $3,$2,$1 }'
所需格式FILENAME SHA1 FILESIZE
的示例输出(由于我的本地测试):
./GSE11111/GSE11111_RAW.tar 9ed615fcbcb0b771fcba1f2d2e0aef6d3f0f8a11 25446400
./artwork_tmp 3a43f1be6648cde0b30fecabc3fa795a6ae6d30a 40010166
答案 1 :(得分:1)
如果使用stat
命令来避免需要解析ls
的输出,则可以简单地回显所需的所有值:
while IFS= read -r -d '' listed
do
echo "$listed" $(sha1sum "$listed") $(stat -c "%s" "$listed")
done < <(find /my/output -type f -size -20000c -print0)
检查您的stat
版本,但上面是GNU。在OS X上,例如,
stat -f "%z" $listed