Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 排除具有特定模式的shell脚本中的文件_Bash_Shell - Fatal编程技术网

Bash 排除具有特定模式的shell脚本中的文件

Bash 排除具有特定模式的shell脚本中的文件,bash,shell,Bash,Shell,我需要创建一个shell脚本来创建特定目录中文件的缩略图,但不包括已经创建的缩略图。 原始文件使用五位数.jpg命名。13993.jpg。Th缩略图名为13993_thumb.jpg。 下面的代码是我从bu开始的,我无法找到匹配的模式。。。 有什么建议吗 #/bin/bash 对于*.jpg中的i 做 echo“处理图像$i…” [$i==“0-9_thumb.jpg”*]&&continue #/usr/bin/convert-缩略图200$i thumb.$i 完成 您没有使用正确的全局模式

我需要创建一个shell脚本来创建特定目录中文件的缩略图,但不包括已经创建的缩略图。 原始文件使用五位数.jpg命名。13993.jpg。Th缩略图名为13993_thumb.jpg。 下面的代码是我从bu开始的,我无法找到匹配的模式。。。 有什么建议吗

#/bin/bash
对于*.jpg中的i
做
echo“处理图像$i…”
[$i==“0-9_thumb.jpg”*]&&continue
#/usr/bin/convert-缩略图200$i thumb.$i
完成

您没有使用正确的全局模式。您需要使用:

[[ "$i" == [0-9]*"_thumb.jpg" ]] && continue
  • 字符类
    [0-9]*
    将匹配一个或多个数字
  • 全局模式不应该在引号中,只有文字文本需要在引号中

  • 更好地利用UTIL和管道的功能:

    $ ls *.jpg
    11223.jpg  12345_thumb.jpg  42424.jpg  99999_thumb.jpg
    $ ls *.jpg | grep -v '^[0-9]\{5\}_thumb\.jpg' | while read f; do echo convert $f ... ; done
    convert 11223.jpg ...
    convert 42424.jpg ...
    
    正则表达式在您的情况下:

    [[“12345_thumb.jpg”=~^[0-9]{5}_thumb\.jpg$]]
    
    我可以知道不接受答案的原因吗?只是想让您知道,其他答案可能会导致明显的问题,因为它正在解析
    ls
    的输出(带有空格或新行的文件将立即打断它)。此外,它使用多个管道来实现一些可以用更简单的方式完成的事情。在更复杂的任务中,
    grep
    允许使用更强大的Perl正则表达式,而Bash只有全局模式和扩展正则表达式。使用问题中列出的习惯用法看起来像是Bash的ism。但对于简单的情况来说(就像作者所问的那样)使用
    for
    +
    continue
    一点问题都没有:)我回答的是glob模式,因为这个问题也试图这样做。毫无疑问,regex更强大,但即使是在纯BASH中也可以做到这一点。在这种情况下,glob模式
    [0-9][0-9][0-9][0-9][0-9][0-9]“_thumb.jpg”
    也会起作用。无论您做什么,都不会解析ls的输出来实现这样简单的结果。@anubhava,请仔细阅读问题:“原始文件是使用五位数.jpg.Eg.13993.jpg命名的。”这与解析
    ls
    的输出无关。研究一下为什么这是一个有风险的解决方案。