Synology의 파일 이름에 타임스탬프가 포함된 파일 이름 바꾸기

Synology의 파일 이름에 타임스탬프가 포함된 파일 이름 바꾸기

많은 수의 파일이 이름에 타임스탬프가 포함되어 "이름이 변경되었습니다". 일괄 이름을 바꾸는 방법을 찾을 수 없습니다. "Batch Rename Utility"와 같은 일괄 이름 바꾸기를 사용하고 regex 명령을 사용하려고 하는데 명령을 만들 수 없습니다.

잘못된 파일 이름은 다음과 같습니다. [130bpm] salsaish (2020_11_04 13_32_49 UTC).wav파일은 다음과 같아야 합니다.[130bpm] salsaish.wav

따라서 삭제된 문자열은 다음과 같습니다 (2020_11_04 13_32_49 UTC). 그러나 이러한 문자열은 이름이 변경된 시기에 따라 변경될 수 있으며 파일에 특수 문자가 포함될 수 있습니다.

이름을 모두 바꾸는 방법이 있나요?

답변1

내 경우엔 SynologyPerl되고 안 돼 rename. 안전 문제로 인해공격 표면Perl, 장치에 아무것도 추가하면 안 됩니다 . 플러그인이 있지만 sh기본 쉘인 pure를 사용할 수 있습니다( sh링크 bash):

for i in *.wav; do echo mv -- "$i" "${i% (*}.wav"; done

또는치환존재하다매개변수 확장:

for i in *.wav; do echo mv -- "$i" "${i// (*)/}"; done

이것은 쉘을 사용합니다매개변수 확장 바라보다:http://mywiki.wooledge.org/BashFAQ/073그리고 man bash의 "매개변수 확장". 또한보십시오http://wiki.bash-hackers.org/syntax/pe

% (*

오른쪽 부분을 삭제한다는 뜻 [[:space:]](*입니다 glob.정규식.

echo출력이 만족스러우면 제거하십시오.

답변2

Perl로 구현된 프로그램( 패키지의 일부인 rename다른 프로그램이 있음 ):renameutil-linux

$ perl-rename  -n 's, \(.+?\),,' *
[130bpm] salsaish (2020_11_04 13_32_49 UTC).wav -> [130bpm] salsaish.wav

탐욕스럽지 않은 방식으로 첫 번째 공백과 괄호 및 그 사이의 모든 항목을 제거합니다. 새 이름이 원하는 이름인지 확인하고 -n실제로 이름 바꾸기를 수행하려면 삭제하세요.

답변3

오래 지연되어 죄송합니다. 다음은 제가 PHP에서 사용하는 코드입니다.

<?php
function getDirContents($dir, &$results = array()) {
    $files = scandir($dir);

    foreach ($files as $key => $value) {
        $path = realpath($dir . DIRECTORY_SEPARATOR . $value);
        if (!is_dir($path)) {
            $results[] = $path;
        } else if ($value != "." && $value != "..") {
            getDirContents($path, $results);
            $results[] = $path;
        }
    }

    return $results;
}

$dir = getDirContents('./DBM5000');

echo '<table equalcells="1">';

foreach($dir as $file)
{
    
    $good_file = preg_replace("/ \([^)]+\)/","", $file);    
    
    $isfile = is_file($good_file);
    
    echo '<tr>';
    echo '<td>'.$file.'</td>';
    echo '<td>'.$good_file.'</td>';
    
    if(pathinfo($good_file, PATHINFO_EXTENSION))
    {
        echo '<td>FILE</td>';
        
        rename($file, $good_file);
        
    }
    else
    {
        echo '<td>DIRECTORY</td>';
    }
    
    echo '</tr>';   
}

echo '</table>';

관련 정보