命令列正規表示式刪除文件

命令列正規表示式刪除文件

我有一系列文件,它們總是以至少 5 個數值開頭,例如:

85966_88.jpg

使用這個答案我學到了在命令中使用 find 和 regextype 來刪除文件,如下所示:

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

我改變了這個命令來滿足我的需要,如下所示:

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

我執行該命令,但它不會刪除檔案。我不知道如何刪除所有前 5 位數字,然後是 _ 的 .jpg

答案1

首先,命令如所寫不刪除任何內容:如您連結的答案所述

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

其次,對於您的情況來說太複雜,因為您不想將刪除限制為匹配的範圍或子集(因此您不需要 shell 測試內容) - 您可以簡單地執行以下操作

find -regextype egrep -regex '.*/[0-9]{5}_.*\.jpg' -print

(測試)並-print-delete您滿意其工作正常後更換。

然而,即使正則表達式似乎也過於複雜 - 一個簡單的全域匹配實際上需要更少的輸入:

find -name '[0-9][0-9][0-9][0-9][0-9]_*.jpg' -print

(再次,當你確定時替換-print為)。-delete

如果您不需要遞歸搜索,一個簡單的 shell glob 應該可以工作:

rm -i [0-9][0-9][0-9][0-9][0-9]_*.jpg

相關內容