如何将文件夹中的文件重命名为相应的md5sum?

时间:2017-02-23 09:44:22

标签: php bash md5sum

我在plain names and file names with spaces also的文件夹中有大量样本,我想将所有文件重命名为相应的md5sum。

我尝试了这个逻辑for f in $(find /home/SomeFolder/ -type f) ;do mv "$f" "$(md5sum $f)";done

但是,如果mv: cannot move to表示没有这样的目录,则无法正常工作。

我也尝试了这个逻辑Rename files to md5 sum + extension (BASH)并尝试了这个for f in $(find /home/Testing/ -type f) ;do echo md5sum $ f ;mv $f /home/Testing/"echo md5sum $ f``“;完成; ` 但它没有用。

任何解决此问题的建议。

我想将文件替换为没有任何扩展名的md5sum名称

sample.zip --> c75b5e2ca63adb462f4bb941e0c9f509

c75b5e2ca63adb462f4bb941e0c9f509c75b5e2ca63adb462f --> c75b5e2ca63adb462f4bb941e0c9f509

file name with spaces.php --> a75b5e2ca63adb462f4bb941e0c9f509

2 个答案:

答案 0 :(得分:1)

  

请参阅为什么您不应在for循环中解析lsfind的输出,ParsingLs

如果您file names with spaces also建议使用-print0 GNU findutils选项,那么在\0文件名后面嵌入read字符且空分隔符的作业如下。

/home/SomeFolder内运行以下脚本,并使用当前目录中的find

#!/bin/bash

while IFS= read -r -d '' file
do
    mv -v "$file" "$(md5sum $file | cut -d ' ' -f 1)"
done< <(find . -mindepth 1 -maxdepth 1 -type f -print0)

深度选项可确保当前文件夹.未包含在搜索结果中。现在,这将获取当前目录中的所有文件(请记住它不会通过子目录递归)并使用md5sum文件名重命名文件。

-v中的mv标志用于详细输出(您可以删除),以查看如何将文件重命名为。

答案 1 :(得分:0)

为什么不使用php脚本,如下所示。这将遍历所有文件,重命名它们,然后如果成功删除旧文件。

$path = '';
if ($handle = opendir($path)) {
    while (false !== ($file = readdir($handle))) { 
        if (substr($file, 0, 1) == '.') {
            continue;
        }

            if (rename($path . $file, $path . md5($file)))
            {
                unlink($path . $file);
            }

    }
    closedir($handle); 
}