Как я могу добавить этот preg_match в мой скрипт PHP? - PullRequest
0 голосов
/ 25 июня 2018

У меня есть скрипт для поиска файлов с более высокой ревизией (на основе соглашения об именовании файлов).

IE Ultimate Spreadsheet (Rev A) .xls удаляется, если Ultimate Spreadsheet (Rev B) .xls существовал.Это делает то же самое с номерами версий довольно хорошо.Я пытаюсь добавить функциональность, чтобы в основном происходило то же самое, но чтобы включить файлы без "Rev", поскольку в некоторых именах файлов вообще нет "Rev".

Так, например, я хотел добавить функциональностьдля:

Ultimate Powerpoint.ppt , подлежащее удалению, если Ultimate Powerpoint (Rev A) .ppt или Ultimate Powerpoint (Rev B) .ppt существовалЯ думаю, что у меня почти есть код, чтобы сделать это, уже основанный на том, что он работает с первым правилом, упомянутым выше, но я сам не писал его, и я довольно придирчив к PHP, поэтому задавался вопросом, может ли кто-то указать мне правильное направление.Большое спасибо!Мой текущий код:

$fileList = trim(shell_exec("ls -a -1"));
$fileArray = explode("\n", $fileList);

shell_exec('mkdir -p Removed');



// Do this magic for every file
foreach ($fileArray as $thisFile)
{
    if (!$thisFile) continue;
    // Probably already been removed
    if (!file_exists($thisFile)) continue;

    $niceName = trim(preg_replace('%[\(|\[].*%', '', $thisFile));
    preg_quote(pathinfo($thisGame, PATHINFO_EXTENSION), '/') . '$/', '', $thisFile);


// Check for reversions e.g. (Rev 2) or (Rev A)
    if (preg_match('%\(Rev (\d|[A-Za-z])\)%', $thisFile, $revNum))
    {
        if (is_numeric($revNum[1]))
        {
            $revNum = intval($revNum[1]);
        }
        else
        {
            $revNum = ord($revNum[1]);
        }
    }

    $otherVersions = trim(shell_exec("ls -1 \"{$niceName} (\"*\"(Rev \"* 2>/dev/null"));
    if ($otherVersions)
    {
        $otherVersionArray = explode("\n", $otherVersions);
        foreach ($otherVersionArray as $otherFile)
        {
            preg_match('%\(Rev (\d|[A-Za-z])\)%', $otherFile, $thisRev);
            if (is_numeric($thisRev[1]))
            {
                $thisRev = intval($thisRev[1]);
            }
            else
            {
                $thisRev = ord($thisRev[1]);
            }

            if (isset($revNum) && $revNum < $thisRev)
            {
                // Other version is newer, bin ours
                echo "{$thisFile} has an inferior version number/letter [{$revNum} VS. {$thisRev}] - Moved to Removed folder.\n";
                shell_exec("mv ".escapeshellarg($thisFile)." Removed/");
                continue 2;
            }
        }
    }
}
...