我有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