Bash 排除具有特定模式的shell脚本中的文件
我需要创建一个shell脚本来创建特定目录中文件的缩略图,但不包括已经创建的缩略图。 原始文件使用五位数.jpg命名。13993.jpg。Th缩略图名为13993_thumb.jpg。 下面的代码是我从bu开始的,我无法找到匹配的模式。。。 有什么建议吗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 完成 您没有使用正确的全局模式
#/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
的输出无关。研究一下为什么这是一个有风险的解决方案。