“重命名”和“mv”有什麼區別?
mv
我並不完全清楚,但是和rename
(從util-linux-ng 2.17.2
as )有什麼區別/usr/bin/rename
?rename
除了接受正則表達式之外,還有其他的優勢mv
嗎?我相信rename
也可以一次處理多個文件重命名,mv
而不會這樣做。我無法在他們的
man
頁面中找到明確的指示,或者通過我自己的一些調查,他們與眾不同。
對於兩者來說,基本上都是蓋子上所說的。
mv
是將一個或多個文件移動到給定目標的標準實用程序。如果只有一個文件要移動,它可用於重命名文件。如果有多個,mv
僅當目標是目錄時才有效,並將文件移動到那裡。因此
mv foo bar
,要麼將文件移動foo
到目錄bar
(如果存在),要麼重命名foo
為bar
(如果bar
不存在或不是目錄)。mv foo1 foo2 bar
只會將兩個文件移動到 directorybar
,或者如果bar
不是目錄則抱怨。
mv
將呼叫rename()
C 庫函式來移動文件,如果這不起作用(它們正在被移動到另一個文件系統),它將復製文件並刪除原件。如果您只有
mv
並且想要重命名多個文件,則必須使用 shell 循環。網站上有很多關於此的問題,請參見例如this、this和其他。另一方面,各種
rename
實用程序分別重命名文件。您提到的
rename
from util-linux進行了簡單的字元串替換,例如rename foo bar *
將更foobar
改為barbar
和asdffoo
。但是,它不採用正則表達式!asdfbar
Perl 重命名實用程序(或它的各種實例)採用 Perl 表達式來轉換文件名。人們很可能會使用一個命令,其中模式是一個正則表達式。
s/*pattern*/*replacement*/
util-linux rename 和 Perl rename 都可以通過對文件名進行適當的更改來同時將文件移動到另一個目錄,但是有點尷尬。兩者都只是呼叫
rename()
文件,因此從一個文件系統移動到另一個文件系統是行不通的。至於
rename
您擁有哪些,可能取決於您的發行版和/或您安裝的內容。他們中的大多數都支持rename --version
,因此請使用它來確定您擁有哪一個。