命令列上的文件匹配模式?

命令列上的文件匹配模式?

有人可以幫我處理相對複雜的命令列文件匹配模式嗎?

我的目錄中有檔案如下:

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 的答案應該適合

相關內容