【发布时间】:2019-10-17 19:55:34
【问题描述】:
我试图在管道之后将print $1 和print $2 的awk 输出传递给setfattr。扩展属性的值是一个 MD5 哈希值,它是根据来自find 命令输出的输入文件计算得出的。这是我目前所拥有的:
find /path/to/dir -type f \
-regextype posix-extended \
-not -iregex '.*\.(jpg|docx|psd|jpeg|png|html|bmp|gif|txt|pdf|mp3|bts|srt)' \
| parallel -j 64 md5sum | awk '{system("setfattr -n user.digest.md5 -v " $1 $2)}'
在最后一个管道分别返回哈希和文件路径之后有awk '{print $1}' 和$2 就好了,我只是不确定如何将这些值放入setfattr。 setfattr 只是在运行该命令时引发一般使用错误。这只是一个语法问题还是我完全错了?
【问题讨论】:
-
或许可以试试
for循环。喜欢for atr1 in $(find ....) ;do setfatter ....$atr ;done -
是的,像
for i in find /path/to/dir -type f -regextype posix-extended -not -iregex '.*\.(jpg|docx|psd|jpeg|png|html|bmp|gif|txt|pdf|mp3|bts|srt)' -print0); do setfattr -n user.digest.md5 -v "$(md5sum "${i}")" ${i}; done这样的东西确实有效,但我不知道如何使它与parallel一起工作。 -
( your entire for loop ) | parallel -j 64 md5sum,可能是这个作品。 -
我决定使用while循环和
md5deep。不是很好,但似乎比单线程运行快一点md5sum:find /path/to/dir -type f -regextype posix-extended -not -iregex '.*\.(jpg|docx|psd|jpeg|png|html|bmp|gif|txt|pdf|mp3|bts|srt)' -print0 | while IFS= read -r -d '' i; do setfattr -n user.digest.md5 -v "$(md5deep -j 8 "${i}" | awk '{print $1}')" "${i}"; done