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

2021-01-09 TechWeb

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

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

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

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

* – 匹配 0 個或者多個字符 ? – 匹配任意單個字符 [序列] – 匹配序列中的任意一個字符 [!序列] – 匹配任意一個不在序列中的字符

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

使用擴展模式匹配操作符刪除文件

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

*(模式列表) – 匹配 0 個或者多個出現的指定模式 ?(模式列表) – 匹配 0 個或者 1 個出現的指定模式 @(模式列表) – 匹配 1 個或者多個出現的指定模式 !(模式列表) – 匹配除了一個指定模式之外的任何內容

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

# shopt -s extglob 

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

$ rm -v !("filename")  

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

2. 刪除除了 filename1 和 filename2 之外的所有文件

$ rm -v !("filename1"|"filename2")  

在 Linux 下刪除除了一些文件之外的所有文件

3. 下面的例子顯示如何通過交互模式刪除除了 .zip 之外的所有文件

$ rm -i !(*.zip)  

在 Linux 下刪除除了 Zip 文件之外的所有文件

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

$ rm -v !(*.zip|*.odt)   

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

一旦你已經執行了所有需要的命令,你還可以使用如下的方式關閉 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  

find 命令 —— 刪除 .gz 之外的所有文件

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

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

使用 find 和 xargs 命令刪除文件

7. 讓我們看一個額外的例子,下面的命令行將會刪除掉當前目錄下除了 .gz、 .odt 和 .jpg 之外的所有文件:

$ 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  

使用 bash 變量 GLOBIGNORE 刪除文件

註:為了理解上面的命令行採用的標識的意思,請參考我們在每一個插圖中使用的命令對應的 man 手冊。

就這些了!如果你知道有實現相同目錄的其他命令行技術,不要忘了通過下面的反饋部分分享給我們。

點讚 0

相關焦點

  • linux各個目錄代表什麼
    :存放所有用戶都可以使用的linux基本操作命令;(目錄中多是可執行的二進位文件)/dev:設備文件目錄,虛擬文件系統,主要存放所有系統中device的相關信息,不論是使用的或未使用的設備,只要有可能使用到,就會在/dev中建立一個相對應的設備文件;設備文件分為2種類型:字符設備文件和塊設備文件(目錄中基本上都是設備文件,如硬碟設備文件
  • 「linux命令詳解」lsof命令解析,教你一步打開所有文件
    對編程感興趣的可以私信我獲取資料簡介lsof(list open files)是一個列出當前系統打開文件的工具。在linux環境下,任何事物都以文件的形式存在,通過文件不僅僅可以訪問常規數據,還可以訪問網絡連接和硬體。
  • 按時間順序清理linux分區的文件方法
    linux系統和windows系統磁碟分區不一樣。在windows系統我們通俗地稱C盤、D、E、F盤等。但在linux系統換了叫根分區(/),啟動分區(/boot),交換分區(/swap),家目錄分區(/home).文件匯出分區(/repout)等。
  • 怎麼將linux刪除文件夾
    對於如何刪除Linux文件夾的問題,我們列出了操作的步驟和方法,幫助您解決如何刪除Linux文件夾的問題。Linux很容易刪除目錄。很多人仍然習慣使用rmdir。然而,一旦目錄不是空的,他們就深感苦惱。現在他們可以使用Rm rf命令了。
  • Linux下文件(文件夾)的壓縮和解壓
    前言在linux下,當我們上傳一個較大的文件或者要安裝一個軟體(如tomcat、mysql等)時,我們需要先將官網下載的壓縮包在linux伺服器上進行解壓,再進行安裝。如果是由程序包生成的一個目錄內容較多或較大時,我們還可能需要對某個文件夾需要壓縮,這就需要用到我們本節要介紹的內容,文件(文件夾)的壓縮和解壓。
  • vim+py文件構造linux後門
    下的標準輸入、輸出、錯誤重定向到套接字中並開啟一個shell,從而實現數據傳輸。成功連接後,受害者主機要顯示建立了一個sh連接。這個一個簡單的python後門就實現了,但實際中,有很多伺服器是沒有安裝python應用的,那在沒有python應用的伺服器下就不能使用了麼?
  • java中如何遍歷一個目錄下的子目錄和文件
    我們在項目開發中,有時候會要對文件系統的文件或目錄做一些操作處理。其中就包括遍歷一個指定目錄下的子目錄和文件這樣的需求。今天就來說說java中如何遍歷一個目錄下的子目錄和文件。listFiles()沒有參數的listFiles()方法能獲取到指定目錄下的所有文件以及子目錄。上示例展示一下。「C:\Windows」目錄下內容比較多,輸出內容比較多,就不全部截到圖中了。
  • Linux之父如何定義Linux!主要想讓黑客、計算機學生使用和學習!
    LINUX是一個免費類unix內核,適用於386-AT計算機,附帶完整原始碼。 主要讓黑客、計算機科學學生使用,學習和享受。 它大部分用C編寫,但是一小部分是用gnu格式彙編,而且引導序列用的是因特爾086彙編語言。
  • 怎麼恢復被徹底刪除的文件?簡單有效方法分享
    我們都知道,如果您普通的刪除倒還好,可以通過專業軟體或者回收站中找回。如果刪除了之後出現覆蓋的情況,那就沒有辦法恢復丟失的文件了。那麼,如果刪除的文件沒有覆蓋,但是被徹底刪除了該如何應對呢?您無需擔心,下面將為大家分享兩種簡單有效的方法,一起看看吧。
  • Linux文件管理(下)
    文件的大小,以高可讀性顯示示例代碼:統計 /var/log 目錄大小用法三:du目錄名示例代碼:#du /var/log/含義:統計/var/log/目錄的大小,包含目錄下每一個單獨文件的大小用法四:du-s目錄名示例代碼:#du -s /var/log/含義:統計/var/log/boot.log文件的大小,匯總只顯示目錄大小用法五
  • 「正點原子Linux連載」第五十八章Linux INPUT子系統實驗
    input類,這樣系統啟動以後就會在/sys/class目錄下有一個input子目錄,如圖58.1.2.1所示:圖58.1.2.1input類第2428~2429行,註冊一個字符設備,主設備號為INPUT_MAJOR,INPUT_MAJOR定義在include/uapi/linux/major.h文件中,定義如下:
  • 從串口驅動到Linux驅動模型,想轉Linux的必會!
    系統中的所有都歸結為一個文件,包括命令、硬體和軟體設備、作業系統、進程等等對於作業系統內核而言,都被視為擁有各自特性或類型的文件。至於說Linux是基於Unix的,很大程度上也是因為這兩者的基本思想十分相近第二. 每個軟體都有確定的用途。。
  • 一鍵匯總同一文件夾下所有表格,三種小技巧分享給你
    第一點:文件名記得帶.bat的後綴; 第二點:保存類型選擇【所有文件】 點擊確定,就會出現一個可執行文件,類型為【windows批處理文件】。
  • 如何從Android恢復已刪除的文件
    但是,Android數據恢復並不是那麼簡單,因為沒有可存儲丟失數據的回收站類型功能。不過請放心,一切都不會丟失。 您可以在Android智慧型手機上恢復已刪除的文件,我們將向您展示如何操作。 有幾種方法可以還原已刪除的文件,然後可以採取一些步驟來將來保護您的文件。 接下來,讓我們看看如何在Android上恢復已刪除的文件。
  • 在Linux作業系統裡使用xargs命令
    通過這個命令你可以有效地處理多個文件,節省你的時間和精力。在這篇教程中,你可以學到如何一次性對多個文件執行命令或腳本操作,再也不用擔心像單獨處理無數個日誌或數據文件那樣嚇人的任務了。本文引用地址:http://www.eepw.com.cn/article/268330.htm
  • VBA中遍歷 文件夾下(含有子文件夾)的所有文件
    看到有網友問如何 VBA中遍歷 文件夾下(含有子文件夾) 的所有文件,就做了一個示例教程。VBA中遍歷文件夾下所有文件(含子文件夾)的方法1)使用Dir() 的方法2)使用VBA的filesercth對象3)使用FileSystemObject對象及遞歸
  • 如何將 Linux 終端中命令的輸出保存到文件中 | Linux 中國
    有時你需要將輸出保存到文件中以備將來參考。當然你可以在 Linux 終端中複製和粘貼,但是有更好的方法可以在 Linux 命令行中保存 shell 腳本或命令的輸出,讓我演示給你看。 方法 1:使用重定向將命令輸出保存到文件中 你可以在 Linux 中使用重定向來達成目的。
  • 如何使用命令行對無文件惡意軟體進行取證
    4.使用諸如memfd_create()之類的方法在RAM中創建一個可以運行的匿名文件。在本篇文章中,我們將討論如何檢測最後一個攻擊向量。memfd_create()無文件攻擊首先,向大家介紹一個linux系統的底層調用函數memfd_create()。
  • 文件目錄發生了增刪改操作?java如何實時監控?
    前言有時候你可能有個疑問,IDE總是可以檢測到外部文件是否發生了變化,比如你在某個類裡面加了一些代碼,這時候的IDE就會彈出一個框說你做了更改。再或者是某個文件夾下的文件發生了改變,比如新建了一個或者是刪除了一個等等。這時候我們的IDE依然可以檢測到。
  • dos批處理腳本代碼,一鍵刪除目錄文件夾例子,dos命令bat教程
    今天這個腳本我先大概的介紹一下,windows上有一個臨時目錄temp,我們通過環境變量使用這個temp臨時目錄,然後一鍵刪除臨時目錄中的文件和文件夾,這個就是今天要製作批處理腳本的內容。我們寫批處理腳本,比較簡單的方式就是新建一個文本文檔。