如何在Linux上使用rename命令

Linux筆記本電腦顯示bash提示Fatmawati Achmad Zaenuri / Shutterstock.com

掌握Linux世界文件重命名的強大功能,讓mv和你自己休息一下。重命名是靈活,快速,有時甚至更容易。這是一個命令強大的教程。

mv有什麼問題?

mv沒什麼問題。該命令做得很好,它可以在所有Linux發行版,macOS和其他類Unix操作系統中找到。所以它總是可用的。但有時你只需要推土機,而不是鏟子。

mv命令在生活中有一個目的,那就是移動文件。這是一個令人高興的副作用,它可用於將現有文件移動到具有新名稱的新文件中。凈效果是重命名文件,因此我們得到了我們想要的。但是mv不是專用的文件重命名工具。

用mv重命名單個文件

使用mv重命名文件類型mv,空格,文件名,空格以及希望文件具有的新名稱。然後按Enter鍵。

您可以使用ls來檢查文件是否已重命名。

mv oldfile.txt newfile.txt

ls * .txt

終端窗口中的mv oldfile.txt newfile.txt

用mv重命名多個文件

當您想要重命名多個文件時,事情會變得棘手。 mv無法處理重命名多個文件。你必須使用一些漂亮的Bash技巧。如果你知道一些中級命令行fu,這很好,但是用mv重命名多個文件的複雜性與使用mv重命名單個文件的簡易性形成鮮明對比。

事情迅速升級。

假設我們有一個目錄中包含各種不同類型的文件。其中一些文件具有「.prog」擴展名。我們想在命令行重命名它們,以便它們具有「.prg」擴展名。

我們如何爭相為我們做這件事?我們來看看這些文件。

ls * .prog -l

ls * .prog -l在終端窗口中

這是一種不用編寫實際Bash腳本文件的方法。

for f in * .prog;做mv – 「$f」「${f%.prog} .prg」

for f in * .prog;在終端窗口中執行mv  - 「$f」「${f%.prog} .prg」

DId有用嗎?讓我們檢查文件,看看。

ls * .pr *

ls * .pr *在終端窗口中

所以,是的,它奏效了。它們現在都是「.prg」文件,目錄中沒有「.prog」文件。

剛剛發生了什麼?

這個長命令究竟做了什麼?讓我們分解吧。

for f in * .prog;做mv – 「$f」「${f%.prog} .prg」

第一部分啟動一個循環,依次處理目錄中的每個「.prog」文件。

下一部分說明了處理過程。它使用mv將每個文件移動到一個新文件。新文件將以原始文件的名稱命名,不包括「.prog」部分。將使用「.prg」的新擴展名。

必須有一個更簡單的方法

明確地。它是重命名命令。

重命名不是標準Linux發行版的一部分,因此您需要安裝它。它在Linux的不同系列中也有不同的名稱,但它們都以相同的方式工作。您只需根據您正在使用的Linux風格替換相應的命令名稱。

在Ubuntu和Debian派生的發行版中,你安裝重命名如下:

sudo apt-get install重命名

sudo apt-get install在終端窗口中重命名

在Fedora和RedHat派生的發行版中,您可以像這樣安裝prename。注意最初的「p」代表Perl。

sudo dnf安裝prename

sudo dnf在終端窗口中安裝prename

要在Manjaro Linux中安裝它,請使用以下命令。請注意,重命名命令稱為perl-rename。

sudo pacman -Syu perl-rename

sudo pacman -Syu perl-rename在終端窗口

讓我們再做一次

而這次我們將使用重命名。我們將回滾時鐘,以便我們有一組「.prog」文件。

ls * .prog

ls * .prog在終端窗口中

現在讓我們使用以下命令重命名它們。然後我們將檢查ls是否有效。如果您沒有使用Ubuntu或Debian派生的Linux,請記住使用適當的Linux命令名替換重命名。

重命名's / .prog / .prg /'* .prog

ls * .pr *

在終端窗口中重命名's / .prog / .prg /'* .prog「width =」646「height =」147「onload =」pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);「onerror =」this.onerror = null ; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(本);

這工作,他們現在都是「.prg」文件,並且目錄中沒有「.prog」文件。

這個時間發生了什麼?

讓我們用三個部分解釋一下魔法。

第一部分是命令名稱,重命名(或其他發行版的prename或perl-rename)。

最後一部分是* .prog,它告訴rename對所有「.prog」文件進行操作。

中間部分定義了我們想要對每個文件名進行的工作。這意味著替代。第一個術語(.prog)是重命名將在每個文件名中搜索的內容,第二個術語(.prg)是它將被替換的內容。

命令的中間部分或中心表達式是Perl'正則表達式',它賦予rename命令靈活性。

更改文件名的其他部分

到目前為止,我們已經更改了文件擴展名,讓我們修改文件名的其他部分。

在目錄中有很多C源代碼文件。所有文件名都以「slang_」為前綴。我們可以用ls檢查一下。

ls sl * .c

ls sl * .c在終端窗口中「width =」646「height =」212「onload =」pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);「onerror =」this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this) ;

我們將用「sl_」替換所有出現的「slang_」。命令的格式對我們來說已經很熟悉了。我們只是更改搜索字詞,替換字詞和文件類型。

重命名's / slang_ / sl_'* .c

在終端窗口中重命名's / slang_ / sl_'* .c「width =」646「height =」77「onload =」pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);「onerror =」this.onerror = null; pagespeed。 lazyLoadImages.loadIfVisibleAndMaybeBeacon(本);

這次我們正在尋找「.c」文件,並搜索「slang_」。每當在文件名中找到「slang_」時,它將被替換為「sl_」。

我們可以通過使用相同的參數重複上面的ls命令來檢查該命令的結果:

ls sl * .c

ls sl * .c在終端窗口中「width =」646「height =」197「onload =」pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);「onerror =」this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this) ;

刪除部分文件名

我們可以通過替換搜索項來刪除文件名的一部分。

ls * .c

重命名's / sl _ //'* .c

ls * .c

在終端窗口中重命名's / sl _ //'* .c「width =」646「height =」352「onload =」pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);「onerror =」this.onerror = null; pagespeed。 lazyLoadImages.loadIfVisibleAndMaybeBeacon(本);

我們可以從ls命令看到我們的「.c」文件都以「sl_」為前綴。讓我們完全擺脫它。

rename命令遵循與以前相同的格式。我們將要尋找「.c」文件。搜索詞是「sl_」,但沒有替換詞。它們之間沒有任何東西的兩個反斜杠意味著什麼,一個空字元串。

重命名將依次處理每個「.c」文件。它將在文件名中搜索「sl_」。如果找到它,它將被替換為空。換句話說,刪除搜索詞。

第二次使用ls命令確認已從每個「.c」文件中刪除「sl_」前綴。

限制對文件名特定部分的更改

讓我們使用ls來查看文件名中包含字元串「param」的文件。然後我們將使用rename將字元串「parameter」替換為該字元串。我們將再次使用ls來查看rename命令對這些文件的影響。

ls * param *

重命名's / param /參數'* .c

ls * param *

在終端窗口中重命名's / param /參數'* .c「width =」646「height =」197「onload =」pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);「onerror =」this.onerror = null; pagespeed。 lazyLoadImages.loadIfVisibleAndMaybeBeacon(本);

發現四個文件在其文件名中有「param」。 param.c,param_one.c和param_two.c在其名稱的開頭都有「param」。 third_param.c在其名稱末尾有「param」,就在擴展名之前。

rename命令將在文件名中的任何地方搜索「param」,並在所有情況下將其替換為「parameter」。

ls命令的第二次使用向我們展示了這正是發生的事情。無論「param」是在文件名的開頭還是末尾,它都被「參數」取代。

我們可以使用Perl的元字元來細化中間表達式的行為。元字元是表示字元位置或序列的符號。例如,^表示「字元串的開頭」,$表示「字元串的結尾」,和。表示任何單個字元(除了換行符)。

我們將使用字元串元字元(^)的開頭將搜索限制為文件名的開頭。

ls * param * .c

重命名's / ^參數/值/'* .c

ls * param * .c

ls值* .c

在終端窗口中重命名's / ^參數/值/'* .c「width =」646「height =」247「onload =」pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);「onerror =」this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(本);

我們列出了之前重命名的文件,我們可以看到字元串「parameter」位於三個文件名的開頭,它位於其中一個文件名的末尾。

我們的rename命令在搜索項「parameter」之前使用行首(^)元字元開頭。這告訴重命名只考慮在文件名開頭處找到的搜索詞。如果搜索字元串「參數」在文件名中的任何其他位置,則將忽略它。

使用ls進行檢查,我們可以看到文件名末尾帶有「parameter」的文件名尚未修改,但在名稱開頭有「參數」的三個文件名已將替換為替換的搜索字元串術語「價值」。

重命名的力量在於Perl的力量。 Perl的所有功能都可供您使用。

使用分組搜索

重命名還有更多的伎倆。讓我們考慮一下你的名字中可能包含類似字元串的文件的情況。它們不是完全相同的字元串,因此簡單的搜索和替換在這裡不起作用。

在這個例子中,我們使用ls來檢查我們以「str」開頭的文件。它們有兩個,string.c和strangle.c。我們可以使用稱為分組的技術一次重命名兩個字元串。

此重命名命令的中心表達式將搜索具有字元序列「stri」或「stra」的文件名中的字元串,其中這些序列後面緊跟「ng」。換句話說,我們的搜索詞將尋找「string」和「strang」。替換術語是「爆炸」。

ls str * .c

重命名's /(stri | stra)ng / bang /'* .c

ls ban * .c

在終端窗口中重命名's /(stri | stra)ng / bang /'* .c「width =」646「height =」197「onload =」pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);「onerror =」this。的onerror = NULL; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(本);

使用ls第二次確認string.c已成為bang.c而strangle.c現在是bangle.c。

使用翻譯重命名

rename命令可以對名為translate的文件名執行操作。翻譯的一個簡單示例是將一組文件名強製為大寫。

在下面的重命名命令中,請注意我們沒有使用s /來啟動中心表達式,我們使用y /。這告訴重命名我們沒有進行替換;我們正在進行翻譯。

a-z術語是Perl表達式,表示從a到z的序列中的所有小寫字元。類似地,A-Z術語表示從A到Z的序列中的所有大寫字母。

此命令中的中心表達式可以解釋為「如果在文件名中找到從a到z的任何小寫字母,則用從A到Z的大寫字元序列中的相應字元替換它們。」

要強制所有「.prg」文件的文件名為大寫,請使用以下命令:

重命名'y / a-z / A-Z /'* .prg

ls * .PRG

在終端窗口中重命名'y / az / AZ /'* .prg「width =」646「height =」147「onload =」pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);「onerror =」this.onerror = null; pagespeed .lazyLoadImages.loadIfVisibleAndMaybeBeacon(本);

ls命令向我們顯示所有「.prg」文件名現在都是大寫的。事實上,要嚴格準確,它們不再是「.prg」文件。他們是「.PRG」文件。 Linux區分大小寫。

我們可以通過反轉中心表達式中a-z和A-Z項的位置來反轉最後一個命令。

重命名'y / A-Z / a-z /'* .PRG

ls * .prg

在終端窗口中重命名'y / AZ / az /'* .PRG「width =」646「height =」147「onload =」pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);「onerror =」this.onerror = null; pagespeed .lazyLoadImages.loadIfVisibleAndMaybeBeacon(本);

你(Wo | Do)不會在五分鐘內學習Perl

掌握Perl是值得的。但是要開始使用rename命令的省時功能,您根本不需要掌握很多Perl知識就可以在功耗,簡單性和時間方面獲得很大的好處。

請閱讀下一步

  • >如何阻止人們竊取您的點評
  • >為什麼流媒體服務需要為HD和4K充電?
  • >如何流UFC 238 Cejudo vs. Moraes Online
  • >如何在Windows 10上輸入Kaomoji(╯°□°)╯(┻━┻
  • >如何在線觀看2019年FIFA女足世界盃(無線)

資訊來源:由0x資訊編譯自HOWTOGEEK。版權歸作者Dave McKay所有,未經許可,不得轉載
提示:投資有風險,入市需謹慎,本資訊不作為投資理財建議。請理性投資,切實提高風險防範意識;如有發現的違法犯罪線索,可積極向有關部門舉報反映。
你可能還喜歡