File-Management

刪除除一個文件外的所有文件/目錄

  • August 27, 2020

我有一個包含大量文件的目錄。我想刪除除 file.txt 之外的所有文件。我該怎麼做呢?

有太多文件無法單獨刪除不需要的文件,並且它們的名稱過於多樣化,無法使用 * 將它們全部刪除,除了這個文件。

有人建議使用

rm !(file.txt)

但它不起作用。它返回:

Badly placed ()'s 

我的作業系統是 Scientific Linux 6。

有任何想法嗎?

POSIXly:

find . ! -name 'file.txt' -type f -exec rm -f {} +

將刪除所有正常文件(遞歸地,包括隱藏文件),除了file.txt. 要刪除目錄,請更改-type f-type d並將-r選項添加到rm.

bash,要使用rm -- !(file.txt),您必須啟用 extglob

$ shopt -s extglob 
$ rm -- !(file.txt)

(或打電話bash -O extglob

請注意,extglob僅適用於bash和 Korn shell 系列。並且使用rm -- !(file.txt)會導致Argument list too long錯誤。

zsh中,您可以使用啟用了extendedglob^來否定模式:

$ setopt extendedglob
$ rm -- ^file.txt

或使用與選項相同的ksh語法bashksh_glob啟用no_bare_glob_qual

引用自:https://unix.stackexchange.com/questions/153862