Переименование и изменение структуры каталогов миллионов файлов в Linux - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть около 4 миллионов файлов JPEG, которые я хочу переименовать и изменить структуру каталогов.

Невозможно просто переименовать каталог, каждое имя файла и изменение каталога уникальны и, к сожалению, определенно должны быть выполнены один за другим.

Мой единственный текущий план - это PHP-скрипт, который будет читатьв старом и новом имени из текстового файла, а затем одну за другой запустите system("mv $src $dest"); вместе со всеми необходимыми командами mkdir.

Я предполагаю, что это займет ДЛИННОЕ время - есть ли лучшие стратегии длясделай это? Будет ли это вызывать чрезмерное перебивание диска и потенциально убивать мой сервер? Вы бы просто запустили его и забыли, или разбили его на маленькие кусочки? В данный момент этот конкретный сервер больше ничего не делает, поэтому мне не нужно беспокоиться о QoS работающего на нем веб-сайта или о чем-то подобном. быстро сбили с толку:

ini_set('memory_limit', '2048M');

$files = file('old-and-new-names.txt');

$directoriesMade = ['/', '/home/', '/home/originals/'];

foreach($files as $n) {

    $n = trim($n);

    [$old, $new] = explode(' ', trim($n));
    $old = '/home/originals'.trim($old);
    $new = '/home/originals'.trim($new);

    echo "\nOLD: ".$old;
    echo "\nNEW: ".$new;

    $dirs = explode('/', $new);
    array_pop($dirs);  // don't want the last item as that's the filename, not a directory

// go through all of the required levels to ensure the directories are created
// using a php array storing the ones already created in an effort to take some pressure off the disk system?
    $path = '';
    foreach ($dirs as $dir) {
        $path .= $dir . '/';
        if (!in_array($path, $directoriesMade)) {
            echo "\n"."system(\"mkdir $path\")";
            system("mkdir $path");
            $directoriesMade[] = $path;
        }
    }

    echo "\nsystem(\"mv $old $new\")";
    system("mv $old $new");

    echo "\n\n";
}

и небольшую часть имен

/20191103/halloween-charity-ride/halloween2019990.jpg /0100/20191103/halloween-charity-ride/452d2ebfde0c5cda6f77188d05e21a06.jpg
/20191103/halloween-charity-ride/halloween2019991.jpg /0100/20191103/halloween-charity-ride/a582eeb68ed42fc7169e80d3c02d715e.jpg
/20191103/halloween-charity-ride/halloween2019992.jpg /0100/20191103/halloween-charity-ride/cb36c56995e4d16e20768753485f6174.jpg
/20191103/halloween-charity-ride/halloween2019993.jpg /0101/20191103/halloween-charity-ride/b707951dd72dbcbdae90be76db8dc4be.jpg
/20191103/halloween-charity-ride/halloween2019994.jpg /0101/20191103/halloween-charity-ride/765f9d00e8b18e6a2e41ee14e56fca27.jpg
/20191103/halloween-charity-ride/halloween2019995.jpg /0101/20191103/halloween-charity-ride/dd92d28b72d504329a49db23e51c879b.jpg
...