有人可以幫我處理相對複雜的命令列文件匹配模式嗎?
我的目錄中有檔案如下:
1.png
1_thumb.png
1-1.png
1-1_thumb.png
1-2.png
1-2_thumb.png
2.png
2_thumb.png
2-1.png
2-1_thumb.png
3.png
3_thumb.png
3-1_thumb.png
我想列出所有沒有副本且文件名與-1
其中某處相同的文件。因此,在上面的範例中,結果將是3.png
。
注意:如果有幫助的話,文件及其帶有“-1”的副本將具有相同的文件大小。
誰能建議如何做到這一點?
答案1
假設所有帶有的檔案-n
都是副本,而且您也不想要拇指,這在 KornShell (ksh) 中有效,並且在帶有extglob
選項集 ( shopt -s extglob
) 的 Bash 中也有效:
for f in !(*_thumb.png|*-[1-9].png); do
g=${f%.png}-1.png
test -f $g || echo $f
done
答案2
如果只有「-1」確定它是副本,那麼您也沒有 2-1.png 或 2-1_thumb.png 檔案的副本。如果這是您的匹配標準並且您也想測試拇指,您可以這樣做
for i in `ls |grep -v "\-1" | cut -f1 -d.`; do
if `echo $i | grep thumb > /dev/null`; then
test -f `echo $i.png | sed 's/_/-1_/g'` || echo $i.png;
else
test -f $i-1.png || echo $i.png;
fi;
done
否則,如果拇指不算數,KAK 的答案應該適合