在Linux上復(fù)制和重命名文件
cp 和 mv 之外,在 Linux 上有更多的復(fù)制和重命名文件的命令。試試這些命令或許會(huì)驚艷到你,并能節(jié)省一些時(shí)間。
Linux 用戶數(shù)十年來一直在使用簡單的 cp
和 mv
命令來復(fù)制和重命名文件。這些命令是我們大多數(shù)人首先學(xué)到的,每天可能有數(shù)百萬人在使用它們。但是還有其他技術(shù)、方便的方法和另外的命令,這些提供了一些獨(dú)特的選項(xiàng)。
首先,我們來思考為什么你想要復(fù)制一個(gè)文件。你可能需要在另一個(gè)位置使用同一個(gè)文件,或者因?yàn)槟阋庉嬙撐募枰粋€(gè)副本,并且希望確保備有便利的備份以防萬一需要恢復(fù)原始文件。這樣做的顯而易見的方式是使用像 cp myfile myfile-orig
這樣的命令。
但是,如果你想復(fù)制大量的文件,那么這個(gè)策略可能就會(huì)變得很老。更好的選擇是:
- 在開始編輯之前,使用
tar
創(chuàng)建所有要備份的文件的存檔。 - 使用
for
循環(huán)來使備份副本更容易。
使用 tar
的方式很簡單。對(duì)于當(dāng)前目錄中的所有文件,你可以使用如下命令:
$ tar cf myfiles.tar *
對(duì)于一組可以用模式標(biāo)識(shí)的文件,可以使用如下命令:
$ tar cf myfiles.tar *.txt
在每種情況下,最終都會(huì)生成一個(gè) myfiles.tar
文件,其中包含目錄中的所有文件或擴(kuò)展名為 .txt 的所有文件。
一個(gè)簡單的循環(huán)將允許你使用修改后的名稱來制作備份副本:
$ for file in *
> do
> cp $file $file-orig
> done
當(dāng)你備份單個(gè)文件并且該文件恰好有一個(gè)長名稱時(shí),可以依靠使用 tab
來補(bǔ)全文件名(在輸入足夠的字母以便唯一標(biāo)識(shí)該文件后點(diǎn)擊 Tab
鍵)并使用像這樣的語法將 -orig
附加到副本的名字后。
$ cp file-with-a-very-long-name{,-orig}
然后你有一個(gè) file-with-a-very-long-name
和一個(gè) file-with-a-very-long-name-orig
。
在 Linux 上重命名文件
重命名文件的傳統(tǒng)方法是使用 mv
命令。該命令將文件移動(dòng)到不同的目錄,或原地更改其名稱,或者同時(shí)執(zhí)行這兩個(gè)操作。
$ mv myfile /tmp
$ mv myfile notmyfile
$ mv myfile /tmp/notmyfile
但我們也有 rename
命令來做重命名。使用 rename
命令的竅門是習(xí)慣它的語法,但是如果你了解一些 Perl,你可能發(fā)現(xiàn)它并不棘手。
有個(gè)非常有用的例子。假設(shè)你想重新命名一個(gè)目錄中的文件,將所有的大寫字母替換為小寫字母。一般來說,你在 Unix 或 Linux 系統(tǒng)上找不到大量大寫字母的文件,但你可以有。這里有一個(gè)簡單的方法來重命名它們,而不必為它們中的每一個(gè)使用 mv
命令。 /A-Z/a-z/
告訴 rename
命令將范圍 A-Z
中的任何字母更改為 a-z
中的相應(yīng)字母。
$ ls
Agenda Group.JPG MyFile
$ rename 'y/A-Z/a-z/' *
$ ls
agenda group.jpg myfile
你也可以使用 rename
來刪除文件擴(kuò)展名。也許你厭倦了看到帶有 .txt 擴(kuò)展名的文本文件。簡單刪除這些擴(kuò)展名 —— 用一個(gè)命令。
$ ls
agenda.txt notes.txt weekly.txt
$ rename 's/.txt//' *
$ ls
agenda notes weekly
現(xiàn)在讓我們想象一下,你改變了心意,并希望把這些擴(kuò)展名改回來。沒問題。只需修改命令。竅門是理解***個(gè)斜杠前的 s
意味著“替代”。前兩個(gè)斜線之間的內(nèi)容是我們想要改變的東西,第二個(gè)斜線和第三個(gè)斜線之間是改變后的東西。所以,$
表示文件名的結(jié)尾,我們將它改為 .txt
。
$ ls
agenda notes weekly
$ rename 's/$/.txt/' *
$ ls
agenda.txt notes.txt weekly.txt
你也可以更改文件名的其他部分。牢記 s/舊內(nèi)容/新內(nèi)容/
規(guī)則。
$ ls
draft-minutes-2018-03 draft-minutes-2018-04 draft-minutes-2018-05
$ rename 's/draft/approved/' *minutes*
$ ls
approved-minutes-2018-03 approved-minutes-2018-04 approved-minutes-2018-05
在上面的例子中注意到,當(dāng)我們在 s/old/new/
中使用 s
時(shí),我們用另一個(gè)名稱替換名稱的一部分。當(dāng)我們使用 y
時(shí),我們就是直譯(將字符從一個(gè)范圍替換為另一個(gè)范圍)。
總結(jié)
現(xiàn)在有很多復(fù)制和重命名文件的方法。我希望其中的一些會(huì)讓你在使用命令行時(shí)更愉快。