我在UNIX中有一个目录,它有数千个.TGZ压缩文件,它们遵循这种模式:
01.red.something.tgz
02.red.something.tgz
03.red.anything.tgz
04.red.something.tgz
01.blue.something.tgz
02.blue.everything.tgz
03.blue.something.tgz
04.blue.something.tgz
01.yellow.something.tgz
02.yellow.blablathing.tgz
03.yellow.something.tgz
04.yellow.something.tgz
他们在文件系统中使用了大量资金,我需要列出它们而不提取文件本身。实际上它需要一些时间,所以我相信这个shellcript符合需要。我是Shellscript的新手,我正在学习,所以我做了这个.sh
$pattern = "red"
for file in *.tgz
do
if [[ ${file} == '...${pattern}.*.tgz' ]]; then
echo" ==> ${file} match the pattern and the output dir is : out/"
tar -tf $file > ./out/$file
else
echo "${file} Doesn't match the pattern"
fi
done
但是我在 if 部分出了问题,即使模式匹配,我也得到了' 不会'匹配模式'消息。
我知道它有点简单如果,但我无法理解为什么这个家伙不起作用。如果你们能解释为什么这样做不起作用,我会感激不尽。
谢谢。
答案 0 :(得分:1)
你需要在bash中创建varibales时注意空格,在if
中不应该'
- 单引号或"
- 如果你想匹配,则需要双引号regex
,使用:if [[ ${file} == ${regEx} ]];
测试:
$ ls *.tgz
01.red.something.tgz 01.yellow.something.tgz
$ ./t.sh
==> 01.red.something.tgz match the pattern and the output dir is : out/
01.yellow.something.tgz Doesn't match the pattern
$ cat t.sh
#!/bin/bash
pattern="red"
regEx="*.${pattern}.*.tgz"
for file in *.tgz
do
if [[ ${file} == ${regEx} ]]; then
echo " ==> ${file} match the pattern and the output dir is : out/"
#tar -tf $file > ./out/$file
else
echo "${file} Doesn't match the pattern"
fi
done