如何将文件夹内的文件重命名为对应的 md5sum?
How to rename files inside folder to its corresponding 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
See Why you shouldn't parse the output of ls
or find
in a for-loop, ParsingLs,
如果您有 file names with spaces also
建议使用 GNU findutils
的 -print0
选项用于在文件名后嵌入 [=16=]
字符 read
的作业空分隔符如下。
运行 下面的脚本 /home/SomeFolder
并使用从当前目录查找
#!/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
重命名文件。
mv
中的 -v
标志用于详细输出(您可以删除)以查看文件如何重命名为。
为什么不使用 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);
}
我在 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
See Why you shouldn't parse the output of
ls
orfind
in a for-loop, ParsingLs,
如果您有 file names with spaces also
建议使用 GNU findutils
的 -print0
选项用于在文件名后嵌入 [=16=]
字符 read
的作业空分隔符如下。
运行 下面的脚本 /home/SomeFolder
并使用从当前目录查找
#!/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
重命名文件。
mv
中的 -v
标志用于详细输出(您可以删除)以查看文件如何重命名为。
为什么不使用 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);
}