我碰巧需要使用以下shell脚本
find . -type f -exec sh -c '
mv "$0" "${0%/*}/$(printf "%s\n" "${0##*/}" | sha1sum | cut -d" " -f1)"
' {} \;
但我不明白这个脚本是如何工作的?例如,如何分析
mv "$0" "${0%/*}/$(printf "%s\n" "${0##*/}" | sha1sum | cut -d" " -f1)"
' {} \;
一块一块?感谢。
答案 0 :(得分:2)
printf "%s\n" "${0##*/}"
${0##*/}
获取路径$0
并删除所有前导目录名称,只留下文件名。 printf命令在末尾添加换行符,然后将此文件名用管道传送给...
| sha1sum | cut -d" " -f1
这会计算文件名的SHA-1哈希值,然后使用cut
从sha1sum的输出中提取哈希值。
${0%/*}
这与${0##*/}
相反 - 这个从$0
获取目录并丢弃文件名。
如此有效,最终得到的是:
mv "$DIR/$FILENAME" "$DIR/$HASH_OF_FILENAME"
在英语中,它将找到的每个文件重命名为原始文件名的SHA-1哈希值。
对于它的价值,它可以简化一点并使其更具可读性。我可能会将mv命令编写为:
mv "$0" "$(dirname "$0")/$(basename "$0" | sha1sum | awk "{print \$1}")