我在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
答案 0 :(得分:1)
请参阅为什么您不应在for循环中解析
ls
或find
的输出,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);
}