2016-03-28 28 views
0

我尝试编写脚本,它使用正则表达式忽略文件。UNIX:忽略具有正则表达式的文件或目录

例如,我想忽略所有包含2016的目录或文件,所以我会写入正则表达式“2016 $”到变量IGN中。但我得到一个错误 “的sed:-e表达式#1,烧焦1:未知的命令:”“'”

max=$(find . -type f | wc -l) 
original=$(find . -type f) 

for i in `seq 1 $max` 
do 
    check=$(find . -type f | head -n "${i}" | tail -n -1 | tr '\/' '\n' | egrep -n "${IGN}") 

    if [ ! -z "$check" ]; then 
     original=$(echo ${original} | sed '${i}d') 
    fi 

done 

echo $original 

回答

0

对不起男人,但为什么你写为做到这一点
脚本?例如:

mkdir test ; cd test 
touch File1_2016 File2_2016 File3_2016 File4_2011 File5_2011 
mkdir Dir1_2016 Dir2_2016 Dir3_2016 Dir4_2000 Dir5_2000 

文件现在是:

> ls -l 
total 20 
drwxrwxr-x 2 mahsom mahsom 4096 Mar 28 21:12 Dir1_2016 
drwxrwxr-x 2 mahsom mahsom 4096 Mar 28 21:12 Dir2_2016 
drwxrwxr-x 2 mahsom mahsom 4096 Mar 28 21:12 Dir3_2016 
drwxrwxr-x 2 mahsom mahsom 4096 Mar 28 21:12 Dir4_2000 
drwxrwxr-x 2 mahsom mahsom 4096 Mar 28 21:12 Dir5_2000 
-rw-rw-r-- 1 mahsom mahsom 0 Mar 28 21:12 File1_2016 
-rw-rw-r-- 1 mahsom mahsom 0 Mar 28 21:12 File2_2016 
-rw-rw-r-- 1 mahsom mahsom 0 Mar 28 21:12 File3_2016 
-rw-rw-r-- 1 mahsom mahsom 0 Mar 28 21:12 File4_2011 
-rw-rw-r-- 1 mahsom mahsom 0 Mar 28 21:12 File5_2011 

欧凯,现在要忽略所有的文件有2016对最后的名字,真的吗?
使用此命令:

find . -regextype sed ! -regex ".*2016$" 
. 
./Dir4_2000 
./Dir5_2000 
./File4_2011 
./File5_2011 

这样,你需要的变量? 这样做:

ARR=$(find . -regextype sed ! -regex ".*2016$" | sed '1d') 

这个测试给你:)

for I in ${ARR[@]} ; do echo $I; done 

注:对不起,我的英语不太好。我希望这个答案能帮助你。

1

对于"2016$"更好地使用通配符"*2016",所以你可以简单

find . -type f -not -name \*2016 

如果你绝对要正则表达式,写你的文件列表到一个临时文件:

fn=/tmp/file-$$.list 
ffn=/tmp/filtered-file-$$.list 
umask 077 # don't leak to other users 
find . -type f > $fn 
grep -v $EXPRESSION $fn > $ffn 
cat $ffn 
rm $fn $ffn