在命令列中刪除特定文件

在命令列中刪除特定文件

我有文件檔案名稱_1,檔案名稱_2……檔案名稱_100000其中檔案名稱依序編號。我怎麼才能刪除索引大於的文件,比如說100

答案1

如果檔案名稱依序編號,只需執行以下命令:

rm fileName_{100..100000}

答案2

你也可以嘗試這個指令,

for i in $(seq 100 100000); do rm fileName_$i; done

如果檔案名稱中包含連續數字,它將刪除所有檔案(範圍從 100 到 100000)。

答案3

一般來說,您有幾種方法可以實現這一目標:

rm fileName_{100..100000}

將被 shell 擴展為大約 100,000 個檔案名稱。如果基本名稱是長路徑且數字足夠高,則實際上可能會超出使用此方法的命令列的最大長度。

for循環

for i in $(seq 100 100000); do rm fileName_$i; done

不會遇到這個問題,但這是一種相對較慢的刪除檔案的方法,因為 shell 必須執行變數替換並啟動 rm 大約 100,000 次。

如果某些文件filename_101遺失,上述兩種方法都可能會導致警告。

通常,基於的解決方案find會更好,因為它們僅適用於實際存在的文件(在發現期間)。但是,存在一些細微的差異:

find . -name 'fileName_[100-100000]' -exec rm {} \;

仍將啟動該rm程式約 100,000 次,同時將最終替換\;+將嘗試最小化子進程的數量。這兩種方法可能會(或多或少)比 using 慢,-delete後者根本不使用外部命令,而是呼叫系統呼叫。

然而,總是首先檢查模式是否確實與您要定位的文件相符:

stefan@tuxedo ~ % mkdir askubuntu
stefan@tuxedo ~ % touch askubuntu/filename_{1..1000}
stefan@tuxedo ~ % find askubuntu -name 'filename_[100-1000]' 
askubuntu/filename_1

因此,在這種情況下,您可以刪除想要保留的文件,並保留應該刪除的文件。

答案4

使用以下命令:

find . -name 'fileName_[100-100000]' -exec rm {} \;

這將刪除 100 到 100000 個檔案。

更多資訊:地點

相關內容