將檔案重新命名到子目錄中

將檔案重新命名到子目錄中

我正在嘗試使用“重命名”重命名一堆文件,並且我的正則表達式設置得很好:

rename --verbose --path 's|^\[(....)\](.*)\.(.*)|$2 ($1).$3|' *

但我真的很想將每個文件放入具有共同開頭的目錄中,所以我嘗試了:

rename --verbose --path 's|^\[(....)\](.*)\.(.*)|$2 ($1)/$2 ($1).$3|' *

但這抱怨沒有一個目錄存在(因為它們不存在)。我是否缺少一個有用的重命名標誌,或者它們是一個更好的工具嗎?

答案1

如果您使用的是基於 Perl 的rename,那麼沒有什麼可以阻止您呼叫mkdir()建立遺失的目錄:

rename --verbose '
    s|^\[(....)\](.*)\.(.*)|$2 ($1)/$2 ($1).$3| &&
    mkdir("$2 ($1)")' *

這與您使用的 Perl 表達式相同,但mkdir()在末尾添加了一個調用,以便在表達式匹配時建立目錄。

原始替換是否正確,或者是否有意義,我不知道(我不知道你有什麼類型的檔案名稱)。重點是,由於表達式是通用 Perl 表達式,因此您可以自由使用任何 Perl 程式碼,只要將$_(預設變數)設為末尾的結果檔案名稱即可。

相關內容