9

我正在建立一个网站,我想对我的图像的文件名进行哈希处理。

如何创建一个 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

这确实重命名了文件,但我不确定用什么来散列文件名。扩展是否被散列?路径呢?

信息

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

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

4 回答 4

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
于 2011-02-18T15:09:26.827 回答
2

试试这个:

newfile=$(openssl sha1 $file | awk '{print $2}')
mv $file $newfile
于 2011-02-18T14:01:51.530 回答
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
于 2011-08-24T03:55:39.030 回答
0

尝试

newfile=$(openssl sha1 $file)    
mv "$file" "${newfile##*= }"
于 2011-02-18T14:00:48.763 回答