如何刪除多個同名檔案?

如何刪除多個同名檔案?

我有很多 txt 文件,名稱為“file1.txt file2.txt file3.txt ... file1000.txt 如何刪除所有這些文件?”我是 unix 新手,擔心意外刪除目錄中的其他檔案。

我看過其他問題,但我不確定,我可以做類似的事情嗎

rm -v !("differentfile"|"anotherfile"|"otherfile"|"finalfile") 

因此刪除所有具有相同名稱和不同編號的檔案並保留我想要的幾個檔案?此行應該只刪除我的工作目錄/資料夾中的文件,正確嗎?

有沒有辦法使用 rm 但只刪除我想一次刪除的特定檔案?

答案1

rm file*.txt將刪除目前目錄中名稱以 string 開頭file並以 string 結尾的所有檔案.txt

如果有許多其中,您將收到“參數列表太長”錯誤。在這種情況下,您可以使用

find . -maxdepth 1 -name 'file*.txt' -delete

反而。

這將使用該find命令查找file*.txt當前目錄中名稱匹配的任何文件,並將其刪除。此-maxdepth 1選項限制find進入除.(目前目錄)之外的任何子目錄。

該命令不會區分檔案和目錄(就像rm file*.txt兩者都不會一樣)。如果您想確保只刪除常規文件,請使用

find . -maxdepth 1 -type f -name 'file*.txt' -delete

對於find沒有非標準-delete和/或-maxdepth選項的實現,請使用

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

或者,您可以使用一個簡單但緩慢的循環:

for name in file*.txt; do
    rm -f "$name"
done

答案2

如果沒有相同結構的其他文件,請使用帶有前綴“file”的所謂的通配符。星號表示任何其他字串(包括空字串)。首先使用“ls”(列表)而不是“rm”進行檢查:

ls file*.txt

您還可以將其範圍縮小到“文件”之後的至少一個數字以及之後的其他任何內容:

ls file[[:digit:]]*.txt

答案3

如果您不確定您的模式是否會包含其他文件,您可以:

  • 將它們移至另一個(臨時)資料夾並mv PATTERN檢查文件列表,如果一切正常,則刪除臨時資料夾。

  • 使用rm -i PATTERN。您必須手動確認每次刪除。

  • 在執行之前,rm您可以執行ls PATTERNorecho PATTERN並檢查清單是否正常。

相關內容