首頁 php教程 PHP开发 如何刪除Linux一個目錄下部分類型之外的所有檔案的三種方法

如何刪除Linux一個目錄下部分類型之外的所有檔案的三種方法

Nov 16, 2016 am 09:35 AM

有的時候,你可能會遇到這種情況,你需要刪除一個目錄下的所有文件,或者只是簡單的通過刪除除了一些指定類型(以指定擴展名結尾)之外的文件來清理一個目錄。

在這篇文章,我們將會向你展現如何透過 rm、 find 和 globignore 指令刪除一個目錄下除了指定檔案副檔名或類型的之外的檔案。

在我們進一步深入之前,讓我們開始簡要的了解一下 Linux 中的一個重要的概念 —— 檔案名稱模式匹配,它可以讓我們解決眼前的問題。

在Linux 下,一個shell 模式是一個包含以下特殊字元的字串,稱為通配符或元字元:

* – 符合0 個或多個字元

? – 符合任意單一字元

[序列] – 匹配序列中的任意一個字元

[!序列] – 匹配任意一個不在序列中的字元

我們將在這兒探索三種可能的辦法,包括:

使用擴展模式匹配操作符刪除檔案

下來列出了不同的擴展模式匹配操作符,這些模式列表是一個用| 分割包含一個或多個文件名的列表:

*(模式列表) – 匹配0 個或多個出現的指定模式

?(模式清單) – 符合0 個或1 個出現的指定模式

@(模式清單) – 符合1 個或多個出現的指定模式

!(模式清單) – 符合除了一個指定模式之外的任何內容

為了使用它們,需要像下面一樣打開extglob shell 選項:

# shopt -s extglob
登入後複製

1. 輸入以下命令,刪除一個目錄下除了filename 之外的所有文件

$ rm -v !("filename")
登入後複製

如何刪除Linux一個目錄下部分類型之外的所有檔案的三種方法

刪除Linux 下除了一個文件之外的所有檔案

2. 刪除除了filename1 和filename2 之外的所有檔案

$ rm -v !("filename1"|"filename2")
登入後複製

如何刪除Linux一個目錄下部分類型之外的所有檔案的三種方法

在Linux 下刪除除了一些檔案之外的所有檔案

3. 下面的範例除了顯示如何透過互動模式.zip 之外的所有檔案

$ rm -i !(*.zip)
登入後複製

如何刪除Linux一個目錄下部分類型之外的所有檔案的三種方法

在Linux 下刪除除了Zip 檔案之外的所有檔案

4. 接下來,透過如下的方式你可以刪除一個目錄下除了所有的.zip 和.odt文件的所有文件,並且在刪除的時候,顯示正在刪除的文件:

$ rm -v !(*.zip|*.odt)
登入後複製

如何刪除Linux一個目錄下部分類型之外的所有檔案的三種方法

刪除除了指定文件擴展的所有文件

一旦你已經執行了所有需要的命令,你還可以使用如下的方式關閉extglob shell 選項。

$ shopt -u extglob
登入後複製

使用Linux 下的find 命令刪除檔案

在這種方法下,我們可以只使用find 命令的適當的選項或者採用管道配合xargs 命令,如下所示:

$ find /directory/ -type f -not -name 'PATTERN' -delete 
$ find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I {} rm {} 
$ find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I {} rm [options] {}
登入後複製

5. 下面的命令將會刪除目前目錄下除了.gz 之外的所有檔案

$ find . -type f -not -name '*.gz' -delete
登入後複製

如何刪除Linux一個目錄下部分類型之外的所有檔案的三種方法

find 指令—— 刪除.gz 之外的所有檔案

6. 使用管道和xargs,你可以透過如下的方式修改上面的範例:

6. 使用管道和xargs,你可以透過如下的方式修改上面的範例:

6. 使用管道和xargs,你可以透過如下的方式修改上面的範例: 如何刪除Linux一個目錄下部分類型之外的所有檔案的三種方法

$ find . -type f -not -name '*gz' -print0 | xargs -0  -I {} rm -v {}
登入後複製

使用find 和xargs 命令刪除檔案

7. 讓我們看一個額外的例子,下面的命令行將會刪除掉當前目錄下除了.gz、 .odt 和.jpg 之外的所有檔案: 如何刪除Linux一個目錄下部分類型之外的所有檔案的三種方法

$ find . -type f -not \(-name '*gz' -or -name '*odt' -or -name '*.jpg' \) -delete
登入後複製

刪除除了指定擴充檔的所有檔案

透過bash 中的GLOBIGNORE 變數刪除檔案

然而,最後的方法,只適用於bash。 GLOBIGNORE 變數儲存了一個路徑名展開pathname expansion功能的忽略模式(或檔案名稱)列表,以冒號分隔。

為了使用這種方法,切換到要刪除文件的目錄,像下面這樣設置GLOBIGNORE 變數:

$ cd test 
$ GLOBIGNORE=*.odt:*.iso:*.txt
登入後複製

在這種情況下,除了.odt、 .iso 和.txt 之外的所有文件,都將從目前目錄刪除。

現在,運行如下的命令清空這個目錄:

$ rm -v *
登入後複製
🎜之後,關閉 GLOBIGNORE 變數:🎜
$ unset GLOBIGNORE
登入後複製

如何刪除Linux一個目錄下部分類型之外的所有檔案的三種方法

使用 bash 变量 GLOBIGNORE 删除文件

注:为了理解上面的命令行采用的标识的意思,请参考我们在每一个插图中使用的命令对应的 man 手册。



本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)