使用文件名的sha1()哈希重命名文件的脚本

时间:2011-02-18 13:56:37

标签: bash rename file-rename

我正在建立一个网站,我想要散列我的图像的文件名。

如何创建一个bash脚本文件,使用旧文件名的sha1重命名目录中的每个文件?

我试过了:

#!/bin/bash
for file in *
do
  if [ -f "$file" ];then
    newfile="openssl sha1 $file"
    mv "$file" $newfile"
  fi
done

但这不起作用:(

修改

基于此处的建议我尝试了这个:

#!/bin/bash
for file in old_names/*
do
  if [ -f "$file" ];then
    newfile=$(openssl sha1 $file | awk '{print $2}')
    cp $file new_names/$newfile.png
  fi
done

这会重命名文件,但我不确定用于散列文件名的内容。扩展得到了解释吗?走了路?

INFO

然后我将使用PHP的sha1()函数来显示图像:

echo "<img src=\"images/".sha1("$nbra-$nbrb-".SECRET_KEY).".png\" />\n";

4 个答案:

答案 0 :(得分:7)

到目前为止答案中的代码示例以及编辑哈希文件的内容。如果要创建的文件名是以前文件名的哈希值,不包括路径或扩展名,请执行以下操作:

#!/bin/bash
for file in old_names/*
do
    if [ -f "$file" ]
    then
        base=${file##*/}
        noext=${base%.*}
        newfile=$(printf '%s' "$noext" | openssl sha1)
        cp "$file" "new_names/$newfile.png"
    fi
done

答案 1 :(得分:2)

试试这个:

newfile=$(openssl sha1 $file | awk '{print $2}')
mv $file $newfile

答案 2 :(得分:1)

我试图做同样的事情,但这里的片段不是/完全/我需要的东西,而且我是bash脚本的新手......对不起......最后我把几个想法粘在了一起进入我需要的脚本 - 查看./pics中的文件并将它们重命名为旧的哈希,同时保持当前的扩展名。我已经在一堆不同的图片上对此进行了测试,到目前为止,它的工作方式与预期一致。我想像我这样的另一个新手能够复制/粘贴这个并且如果你的最终结果与我的相同,那就很好。谢谢大家的帮助!

#!/bin/bash
for file in ./pics/*
  do
    newfile=$(openssl sha1 $file | awk '{print $2}')
    ext=${file##*.}
    mv "$file" "./pics/$newfile"."$ext"
  done

答案 3 :(得分:0)

尝试

newfile=$(openssl sha1 $file)    
mv "$file" "${newfile##*= }"