Rename

“重命名”和“mv”有什麼區別?

  • July 8, 2021

mv我並不完全清楚,但是和rename(從util-linux-ng 2.17.2as )有什麼區別/usr/bin/renamerename除了接受正則表達式之外,還有其他的優勢mv嗎?我相信rename也可以一次處理多個文件重命名,mv而不會這樣做。

我無法在他們的man頁面中找到明確的指示,或者通過我自己的一些調查,他們與眾不同。

對於兩者來說,基本上都是蓋子上所說的。

mv是將一個或多個文件移動到給定目標的標準實用程序。如果只有一個文件要移動,它可用於重命名文件。如果有多個,mv僅當目標是目錄時才有效,並將文件移動到那裡。

因此mv foo bar,要麼將文件移動foo到目錄bar(如果存在),要麼重命名foobar(如果bar不存在或不是目錄)。mv foo1 foo2 bar只會將兩個文件移動到 directory bar,或者如果bar不是目錄則抱怨。

mv將呼叫rename()C 庫函式來移動文件,如果這不起作用(它們正在被移動到另一個文件系統),它將復製文件並刪除原件。

如果您只有mv並且想要重命名多個文件,則必須使用 shell 循環。網站上有很多關於此的問題,請參見例如thisthis其他


另一方面,各種rename實用程序分別重命名文件。

您提到的renamefrom util-linux進行了簡單的字元串替換,例如rename foo bar *將更foobar改為barbarasdffoo但是,它不採用正則表達式!asdfbar

Perl 重命名實用程序或它的各種實例)採用 Perl 表達式來轉換文件名。人們很可能會使用一個命令,其中模式一個正則表達式。s/*pattern*/*replacement*/

util-linux rename 和 Perl rename 都可以通過對文件名進行適當的更改來同時將文件移動到另一個目錄,但是有點尷尬。兩者都只是呼叫rename()文件,因此從一個文件系統移動到另一個文件系統是行不通的。

至於rename您擁有哪些,可能取決於您的發行版和/或您安裝的內容。他們中的大多數都支持rename --version,因此請使用它來確定您擁有哪一個。

引用自:https://unix.stackexchange.com/questions/510553