如何获取文件与模式不匹配

时间:2014-08-20 18:21:13

标签: bash shell

这是我的剧本

data_dir="/home/data"
shopt extglob
files=!($data_dir/*08142014*)
echo ${files[@]}

for file in $files[@]
do 
  #blabla
done

/ home / data包含文件名中包含不同日期信息的多个文件,因此我应该能够获得不包含" 08142014"的文件列表。

但是一直得到语法错误。似乎文件只是"!(/ home / data / 08202014 )",而我想要一个文件名列表。

我错过了什么吗?感谢

2 个答案:

答案 0 :(得分:4)

您可以使用:

data_dir="/home/data"
shopt -s extglob
files=($data_dir/!(*08142014*))

for file in "${files[@]}"
do 
  echo "$file"
done
  • 要设置extglob,您需要使用shopt -s extglob
  • 要设置数组,您的语法不是
  • 检查数组是如何正确迭代的

答案 1 :(得分:1)

您可以使用 - >

files=`ls $data_dir | grep -v 08142014`