Как переименовать файлы внутри папки в соответствующую 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 указав нет такого каталога.

Также я попробовал эту логику Переименование файлов в md5 sum + extension (BASH) и попробовал это for f in $(find /home/Testing/ -type f) ;do echomd5sum $ f;mv $f /home/Testing/"echomd5sum $ f« «; сделано;
`
Но это не работает.

Любые предложения, чтобы решить эту проблему.

Я хочу заменить файл на его имя md5sum без каких-либо расширений

sample.zip --> c75b5e2ca63adb462f4bb941e0c9f509

c75b5e2ca63adb462f4bb941e0c9f509c75b5e2ca63adb462f --> c75b5e2ca63adb462f4bb941e0c9f509

file name with spaces.php --> a75b5e2ca63adb462f4bb941e0c9f509

0

Решение

Узнайте, почему вы не должны анализировать вывод ls или же find в цикле, ParsingLs,

Если у вас есть file names with spaces also рекомендую использовать -print0 вариант GNU findutils за работу, которая встраивает \0 символ после имени файла с 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 из имен файлов.

-v флаг в mv предназначен для подробного вывода (который вы можете удалить), чтобы увидеть, как файлы должны быть переименованы в.

1

Другие решения

Почему бы не использовать скрипт 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);
}
0

По вопросам рекламы [email protected]