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


0

有人可以帮助我使用相对复杂的命令行文件匹配模式吗?

我在目录中有文件如下:

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”的副本将是相同的文件大小。

任何人都可以建议如何做到这一点?

Answers:


2

假设所有文件-n都是副本而且您不想要拇指,这可以在KornShell(ksh)中使用,也可以在Bash中使用extglob选项set(shopt -s extglob):

for f in !(*_thumb.png|*-[1-9].png); do
  g=${f%.png}-1.png
  test -f $g || echo $f
done

0

如果它只是“-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的答案应该适合

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.