如何刪除給定範圍內編號的檔案?

如何刪除給定範圍內編號的檔案?

我有folderA一些文件的編號順序以a_000000.我想要做的是刪除從特定編號開始的檔案:假設a_000750直到此folderA.誰能告訴我如何使用 shell 腳本來做到這一點?

答案1

假設您知道或可以猜測範圍的末尾,您可以使用大括號擴展:

rm a_{000750..000850}

上面的程式碼將刪除 a_000750 和 a_000850 之間的 101 個檔案(並抱怨引用不存在檔案的檔案名稱)。如果您的文件太多,請使用find

find . -name 'a_*' | while read -r file; do 
  [ "${file#./a_}" -gt 000749 ] && rm -v "$file" 
done

在這裡,find簡單地列出了所有匹配的文件a_*。該清單被傳遞到一個while循環,其中每個檔案名稱都被讀入變數中$file。然後,使用 bash字串操作功能,如果數字部分(find 將文件列印為./file,因此${file#./a_}僅列印數字)等於000750或大於,則文件將被刪除。就-v在那裡,您可以看到哪些檔案被刪除。

請注意,上面假設檔名正常。如果您的名稱可以包含空格、換行符或其他奇怪的字符,請改用:

find . -name 'a_*' -print0 | while IFS= read -rd '' file; do 
  [ "${file#./a_}" -gt 000749 ] && rm -v "$file" 
done

答案2

你可以這樣做:

find . -regextype posix-extended -iregex './a_[0-9]{6}' -execdir bash -c '[[ ${1##./a_} > 000750 ]] && echo $1' "removing: " {} \;

或者:

find . -regextype posix-extended -iregex './a_[0-9]{6}' | sort | sed '0,/000750/d' | xargs echo

第一種方法假定一個固定前綴,將其剝離並檢查該值。

第二種方法假設固定長度後綴(和公共固定前綴)並依賴於此事實;而且,雖然按字典順序201排在前面31,但它並不在 之前031

使用命令對此進行測試echo,一旦確定它列出了正確的文件,請改用rm

答案3

在 Bash 中你可以運行:

for i in {1001..3000} ; do rm file_"$i".dat ; done

答案4

就像這樣簡單

rm partialfilename* -f

在你的例子中是

rm a_00075* -f

相關內容