如何在 Linux 命令行中刪除指定擴(kuò)展名的文件
我們大家都知道,在 Linux 中刪除文件可以使用 rm 命令:
不過,使用上述命令刪除文件的時(shí)候,需要知道確切的文件名。那么怎樣根據(jù)文件擴(kuò)展名來刪除多個(gè)文件呢?今天我們來介紹幾種方法。
方法1:使用 rm 命令按擴(kuò)展名刪除文件
作為演示,假如我們要?jiǎng)h除擴(kuò)展名為 gif 的所有文件,可以這樣做:
不過一般情況下,直接刪除是有風(fēng)險(xiǎn)的,在刪除之前最好先檢查一下:
通常情況下,我在刪除文件的時(shí)候會(huì)做如下操作:
此外,還可以同時(shí)刪除多個(gè)擴(kuò)展名的文件,如下:
在使用 rm 命令的時(shí)候,可以使用交互式的 -i 選項(xiàng),該選項(xiàng)要求在刪除文件之前進(jìn)行確認(rèn)。不過這個(gè)適用于刪除單個(gè)或者幾個(gè)文件,如果批量刪除文件,這個(gè)選項(xiàng)就不方便了。
像上面的刪除操作,它具體是怎樣工作的呢?答案是使用的通配符。
簡而言之,通配符是用于匹配特定模式的特殊字符。以下是一些常用的通配符:
通配符 | 用途 |
* | 匹配一個(gè)或多個(gè)匹配項(xiàng) |
? | 匹配單個(gè) |
[] (方括號(hào)) | 指定匹配范圍 |
^ | 從匹配中排除 |
在上面的刪除例子中,我們使用了 * 通配符,這表示它可以匹配任何字符。當(dāng)你使用 *.gif 的時(shí)候,它實(shí)際表示的是與 .gif 組合的任何字符,也就是說,它提供了所有以 gif 為擴(kuò)展名的文件。
* 和擴(kuò)展名之間的點(diǎn)很重要?
有些人在使用通配符的時(shí)候,會(huì)這樣寫:*gif,這是不對(duì)的。* 和擴(kuò)展名之間的點(diǎn) . 至關(guān)重要。
看下面的例子,假如我們使用 *gif 來刪除文件,看看會(huì)怎樣。
可以看到,除了刪除所有 gif 文件外,它還刪除了文件名中帶有字符串 gif 的文件,盡管它不是文件的擴(kuò)展名。所以,刪除帶有通配符或正則表達(dá)式的文件時(shí),應(yīng)確保盡可能精確。
方法2:使用find命令遞歸刪除具有特定擴(kuò)展名的文件?
rm 命令僅刪除當(dāng)前目錄中的文件。即使使用遞歸選項(xiàng),它也不會(huì)從子目錄中刪除文件。
要遞歸刪除具有特定擴(kuò)展名的文件,可以組合find命令和rm命令??聪旅娴睦?,在子目錄中也有 .gif 文件:
要?jiǎng)h除文件,可以使用??find和exec命令??,如下所示:
以下是上述命令的輸出:
下面我們拆開來說明下:
- find 后面的點(diǎn) . 表示在當(dāng)前目錄中搜索;
- -name 選項(xiàng)指定文件的名稱,我們可以在其中使用正則表達(dá)式;
- -exec 選項(xiàng)用于對(duì) find 命令的結(jié)果執(zhí)行 bash 命令;
- {} 大括號(hào)充當(dāng)匹配文件結(jié)果的占位符,因此 rm-v {} 將刪除find命令找到的文件;
- 最后,分號(hào)結(jié)束 shell 執(zhí)行的命令(exec之后的命令),并使用反斜杠 \,以便正確轉(zhuǎn)義分號(hào)。
在下面的文章中可了解 find 命令的更多例子:
??關(guān)于 find 命令的15個(gè)超級(jí)有用的例子??
使用 find 命令處理多個(gè)擴(kuò)展名文件?
上面顯示的命令不包括查找具有多個(gè)擴(kuò)展名的文件,如:rm *.gif *.txt
要實(shí)現(xiàn)這一點(diǎn),可以使用 -o 參數(shù),它表示邏輯或運(yùn)算符,但需要用括號(hào)括起來,且必須使用反斜杠 \ 來轉(zhuǎn)義括號(hào)。
在這里,我們可以看到所有擴(kuò)展名為 txt 的文件和擴(kuò)展名為 gif 的文件都被遞歸刪除。
大家可能會(huì)覺得對(duì)每個(gè)文件擴(kuò)展名類型單獨(dú)使用 find 命令會(huì)更容易,實(shí)際上也是這樣的...