有時你需要 從目錄中刪除幾乎所有文件,但您想保留其中一個或部分。 當它們數量很多時,逐一檢查是一項繁瑣的任務。 這不是最好的選擇,有一些方法可以使 Linux 中的工作變得更加容易,並且您可以立即刪除所有需要的內容。
例如,您可能只想刪除以特定名稱開頭的文件或具有特定擴展名的文件等。 一切皆有可能事實上,在其他場合我已經在 LxA 中展示過類似的教程。 在這裡,您可以按照教程一步步操作,以簡單的方式刪除所有您想要的文件,除了您想要保存的文件。
最好的是 您不需要安裝任何程序, 使用 rm 和 find 等命令可以輕鬆完成此操作。 也就是說,任何 Linux 發行版中都已預安裝的程序。 當然,該方法將基於查找模式並使用這些匹配來僅消除您想要的內容。
那麼,為了消除有 幾種選擇, 這些是什麼…
使用 rm 從目錄中刪除文件
那麼,為了使用 rm命令 要消除你想要的東西,你首先需要知道一些識別模式的方法:
- *(模式列表) – 匹配指定模式的零次或多次出現
- ?(模式列表) – 匹配指定模式的零次或一次出現
- +(模式列表) – 匹配指定模式的一次或多次出現
- @(模式列表) – 匹配指定模式之一
- !(模式列表) – 匹配除給定模式之一之外的任何內容
至 啟用extglob 為了使用它們,您必須首先運行以下命令:
<br data-mce-bogus="1"> shopt -s extglob<br data-mce-bogus="1">
現在您可以使用 rm 刪除您想要的任何內容。 例如, 從目錄中刪除除與名稱匹配的文件之外的所有文件 «lxa»:
rm -v !("lxa")
您還可以指定 您不想刪除的兩個或多個名稱。 例如,為了避免刪除“lxa”和“desdelinux”:
rm -v !("lxa"|"desdelinux")
您可以刪除所有文件, 除了那些有擴展名的 .mp3。 例如:
rm -v !(*.mp3)
完成後,您可以返回 禁用 extglob:
shopt -u extglob
使用 find 從目錄中刪除文件
rm 的另一種選擇是 使用 find 刪除你想要的內容。 您可以將管道和 xargs 與 rm 一起使用,或使用 find 的 -delete 選項。 也就是說,通用語法是:
find /directory/ -type f -not -name 'PATRÓN' -delete find /directory/ -type f -not -name 'PATRÓN' -print0 | xargs -0 -I {} rm [opciones] {}
例如,假設您想要 刪除目錄中除擴展名外的所有文件 .jpg,您可以使用這兩個命令之一,因為它們都會得到相同的結果:
find . -type f -not -name '*.jpg'-delete find . -type f -not -name '*.jpg' -print0 | xargs -0 -I {} rm -v {}
相反,如果你想要 添加一些額外的圖案,你也可以。 例如,假設您不想從目錄中刪除 .pdf 或 .odt:
find . -type f -not \(-name '*pdf' -or -name '*odt' \) -delete
當然,你也可以用|做同樣的事情。 和 xargs 如前面的示例所示。 順便說一句,我們已經使用了 -不否認, 但您可以刪除它以使其積極,即刪除匹配模式而不排除它們。
使用 GLOBIGNORE 變量從目錄中刪除文件
最後,還有 另一種選擇 find 和 rm,這是通過使用環境變量指向要刪除或排除的文件。 例如,假設您要刪除名為 Downloads 的目錄中的所有文件,並保存 .pdf、.mp3 和 .mp4 文件。 在這種情況下,您可以執行以下操作:
cd Descargas GLOBIGNORE=*.pdf:*.mp4:.*mp3 rm -v * unset GLOBIGNORE