关于shell脚本

时间:2011-10-09 04:21:40

标签: bash shell

我碰巧需要使用以下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)"
' {} \;
一块一块?感谢。

1 个答案:

答案 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}")