Скопируйте из имени файла и вставьте в файл - PullRequest
0 голосов
/ 10 марта 2019

У меня есть папка с разными файлами, но все файлы содержат скобки с разными словами. например: From-The- (Far) -East.html и From-The- (near) -West.html

Можно ли скопировать содержимое скобок в файл с помощью специального тега между тегом "body" и удалить скобки после вставки? например: From-The- (Far) -East.html -> скопировать «Far» и вставить его с этим тегом <test>brackets=Far</test> в файл между <body>...</body>? -> после этого имя файла должно быть From-The - East.html (и это для нескольких файлов)

Я подумал, что с помощью некоторых регулярных выражений можно сопоставить / скопировать содержимое скобок, затем вставить его с некоторым "fopen" и затем переименовать файл. Было бы неплохо, если бы кто-нибудь смог мне немного помочь. (Может быть, кто-то знает, как управлять этим с помощью сценария оболочки)

Спасибо

Ответы [ 2 ]

0 голосов
/ 10 марта 2019

Это можно сделать с помощью gawk (на linux)

Создайте файл с именем 'rename.awk':

x==1{ print "<test>brackets=" b "</test>" >newFilename; x=0 }
NR==1 { split(FILENAME,a,/[()]/); b=a[2];  newFilename = a[0] a[1] a[3] a[4] }
/<body/{ x=1 }
{ print $0 >newFilename }

$ gawk -f rename.awk "From-The- (Far) -East.html"

После этого у вас должно быть это:

$ cat "From-The--East.html"
<html>
<head>
<title>From-The-(Far)-East.html</title>
</head>
<body>
<test>brackets=Far</test>
From-The-(Far)-East.html
</body>
</html>

(По крайней мере, если исходный файл выглядел так:

$ cat "From-The-(Far)-East.html"
<html>
<head>
<title>From-The-(Far)-East.html</title>
</head>
<body>
From-The-(Far)-East.html
</body>
</html>
0 голосов
/ 10 марта 2019

Как насчет этого?

$di = new DirectoryIterator($inputpath);
foreach ($di as $file) {
    if ($file->isFile() && $file->isReadable()) {
        $namePart = '';
        if (preg_match('/\((.*)\)/', $file->getFilename(), $namePart) === false) {
            continue;
        }

        $content = file_get_contents($file->getPathname());
        $content = str_replace('<body>', '<body><test>' . $namePart[1] . '</test>', $content);
        file_put_contents($file->getPathname(), $content);

        $newFilename = str_replace($namePart[0], '', $file->getPathname());
        rename($file->getPathname(), $newFilename);
    }
}

Проходит все файлы в $inputpath Если файл является файлом и доступен для чтения, он пытается найти соответствие через регулярное выражение. Результат в $namePart должен быть равен ['(Far)', 'Far'] (в вашем примере).

Затем он вставляет имя в файл. Я знаю, что использовал тупую функцию; но он делает то, что вы просили.

После вставки строки в файл изменяется имя файла.

...