Linux 命令列刪除指定副檔名檔案
導讀 | 怎樣根據副檔名來刪除多個檔案呢?今天我們來介紹幾種方法。 |
我們大家都知道,在 中刪除檔案可以使用 rm :
rm [option] filename
不過,使用上述 刪除檔案的時候,需要知道確切的檔名。那麼怎樣根據副檔名來刪除多個檔案呢?今天我們來介紹幾種方法。
作為演示,假如我們要刪除副檔名為 gif 的所有檔案,可以這樣做:
rm *.gif
不過一般情況下,直接刪除是有風險的,在刪除之前最好先檢查一下:
ls *.gif
通常情況下,我在刪除檔案的時候會做如下操作:
$ ls 1.gif 2.gif 3.gif 4.gif a.jpg b.png c.webp $ ls *.gif 1.gif 2.gif 3.gif 4.gif $ rm -v *.gif removed '1.gif' removed '2.gif' removed '3.gif' removed '4.gif' $ ls a.jpg b.png c.webp
此外,還可以同時刪除多個副檔名的檔案,如下:
$ ls f1.txt f2.txt f3.txt f4.txt not-txt-file.pdf random.txt $ rm -v *.txt *.pdf removed 'f1.txt' removed 'f2.txt' removed 'f3.txt' removed 'f4.txt' removed 'not-txt-file.pdf' $ ls random.txt
在使用 rm 命令的時候,可以使用互動式的 -i 選項,該選項要求在刪除檔案之前進行確認。不過這個適用於刪除單個或者幾個檔案,如果批次刪除檔案,這個選項就不方便了。
像上面的刪除操作,它具體是怎樣工作的呢?答案是使用的萬用字元。
簡而言之,萬用字元是用於匹配特定模式的特殊字元。以下是一些常用的萬用字元:
萬用字元 用途 * 匹配一個或多個匹配項 ? 匹配單個 [] 指定匹配範圍 ^ 從匹配中排除
在上面的刪除例子中,我們使用了 * 萬用字元,這表示它可以匹配任何字元。當你使用 *.gif 的時候,它實際表示的是與 .gif 組合的任何字元,也就是說,它提供了所有以 gif 為副檔名的檔案。
有些人在使用萬用字元的時候,會這樣寫:*gif,這是不對的。* 和副檔名之間的點 . 至關重要。
看下面的例子,假如我們使用 *gif 來刪除檔案,看看會怎樣。
$ ls 1.gif 2.gif 3.gif 4.gif definately-not-a-gif jpg-not-gif not-a-gif $ rm -v *gif removed '1.gif' removed '2.gif' removed '3.gif' removed '4.gif' removed 'definately-not-a-gif' removed 'jpg-not-gif' removed 'not-a-gif'
可以看到,除了刪除所有 gif 檔案外,它還刪除了檔名中帶有字串 gif 的檔案,儘管它不是檔案的副檔名。所以,刪除帶有萬用字元或正規表示式的檔案時,應確保儘可能精確。
rm 命令僅刪除當前目錄中的檔案。即使使用遞迴選項,它也不會從子目錄中刪除檔案。
要遞迴刪除具有特定副檔名的檔案,可以組合find命令和rm命令。看下面的例子,在子目錄中也有 .gif 檔案:
$ ls * file_0.gif file_z.txt not-a-gif not-a-txt dir1: file_1.gif file_a.txt not-a-gif not-a-txt dir2: file_2.gif file_b.txt not-a-gif not-a-txt dir3: file_3.gif file_c.txt not-a-gif not-a-txt dir4: file_4.gif file_d.txt not-a-gif not-a-txt
要刪除檔案,可以使用find和exec命令,如下所示:
find . -type f -name "*.gif" -exec
以下是上述命令的輸出:
$ find . -type f -name "*.gif" -exec rm -v {} \; removed './dir1/file_1.gif' removed './dir3/file_3.gif' removed './dir2/file_2.gif' removed './file_0.gif' removed './dir4/file_4.gif
下面我們拆開來說明下:
- find 後面的點 . 表示在當前目錄中搜尋;
- -name 選項指定檔案的名稱,我們可以在其中使用正規表示式;
- -exec 選項用於對 find 命令的結果執行 bash 命令;
- {} 大括號充當匹配檔案結果的佔位符,因此 rm-v {} 將刪除find命令找到的檔案;
- 最後,分號結束
- 執行的命令(exec之後的命令),並使用反斜槓 \,以便正確轉義分號。
在下面的文章中可瞭解 find 命令的更多例子:
上面顯示的命令不包括查詢具有多個副檔名的檔案,如:rm *.gif *.txt
要實現這一點,可以使用 -o 引數,它表示邏輯或運算子,但需要用括號括起來,且必須使用反斜槓 \ 來轉義括號。
$ ls * file_0.gif file_z.txt not-a-gif not-a-txt dir1: file_1.gif file_a.txt not-a-gif not-a-txt dir2: file_2.gif file_b.txt not-a-gif not-a-txt dir3: file_3.gif file_c.txt not-a-gif not-a-txt dir4: file_4.gif file_d.txt not-a-gif not-a-txt $ find . \( -name "*.gif" -o -name "*.txt" \) -exec rm -v {} \; removed './dir1/file_1.gif' removed './dir1/file_a.txt' removed './dir3/file_3.gif' removed './dir3/file_c.txt' removed './dir2/file_2.gif' removed './dir2/file_b.txt' removed './file_0.gif' removed './file_z.txt' removed './dir4/file_d.txt' removed './dir4/file_4.gif'
在這裡,我們可以看到所有副檔名為 txt 的檔案和副檔名為 gif 的檔案都被遞迴刪除。
大家可能會覺得對每個副檔名型別單獨使用 find 命令會更容易,實際上也是這樣的...
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2924712/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux刪除指定字尾名檔案的命令Linux
- Linux刪除指定字尾名的檔案Linux
- Linux迴圈遍歷所有檔案,刪除指定字尾名檔案Linux
- Linux 命令列 rm 無法刪除檔案Linux命令列
- Linux刪除檔案命令Linux
- Linux下批量刪除空檔案或者刪除指定大小的檔案Linux
- Git刪除指定檔案Git
- linux 刪除問題 一次刪除多個目錄下的相同副檔名的檔案Linux
- Linux下刪除指定資料夾下指定字尾名的檔案Linux
- linux每日命令(25):Linux檔案型別與副檔名Linux型別
- linux下rm命令刪除檔名中包含特殊字元的檔案Linux字元
- linux 批量刪除指定型別檔案Linux型別
- linux的刪除檔案命令和強制刪除命令Linux
- Linux批量刪除指定型別的檔案Linux型別
- Linux刪除指定時間之前的檔案Linux
- Linux 批量刪除指定字尾的檔案Linux
- git 刪除歷史指定檔案Git
- 每天一個 Linux 命令(24):Linux 檔案型別與副檔名Linux型別
- 每天一個linux命令(24):Linux檔案型別與副檔名Linux型別
- Linux rm(刪除檔案/目錄) 命令Linux
- linux下刪除指定日期前的檔案Linux
- 檔案型別和副檔名型別
- rm命令刪除檔案時排除特定檔案
- Linux rm命令:刪除檔案或目錄Linux
- linux rm 命令(刪除檔案和目錄)Linux
- linux下自動刪除過期檔案命令Linux
- Linux系統檔案型別及檔案的副檔名(轉)Linux型別
- 刪除指定目錄下指定字尾的檔案
- Linux批量刪除檔案Linux
- 如何刪除檔名太長的檔案 Win10電腦檔名太長無法刪除Win10
- liunx批量刪除指定字尾的檔案
- Git刪除暫存區的指定檔案Git
- 刪除檔案中包含指定字串的行字串
- Linux rm 命令刪除檔案或資料夾Linux
- 【Linux】linux下刪除/清空資料夾/檔案命令Linux
- 刪除指定日期內的過期檔案
- linux 模糊批量刪除檔案Linux
- Linux檔案的複製、刪除和移動命令Linux