我有很多 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 PATTERN
orecho PATTERN
並檢查清單是否正常。