2016-03-28 54 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