2016-09-26 17 views
0

FTPサーバーのいくつかの配信フォルダから特定のファイルをフィルタリングするための小さなbashスクリプトを作成しようとしています。ステートメントが複数の可能性に一致する必要がある場合

私はフォルダを処理する関数を作成しました。

#!/bin/bash 

function folder_search { 
find FILE in `find ${DIR}/ -maxdepth 1 -type f -mmin +5 -name "*.doc" `; do 
BASENAME=`basename $FILE` 
if [[ $BASENAME == $NAMECONV1 or $BASENAME == $NAMECONV2 ]] 
then 
    "some commands" 
else 
    "some other commands" 
fi 
} 

#folder 1 
DIR=/tmp/folder1 
NAMECONV1="ABC[0-9][0-9][0-9].doc" 
NAMECONV2="NL[0-9][0-9][0-9].doc" 
folder_search 

#folder 2 
DIR=/tmp/folder2 
NAMECONV1="ABC[0-9][0-9][0-9].doc" 
NAMECONV2="B[0-9][0-9][0-9].doc" 
folder_search 

それぞれ40個以上の名前が付けられていますので、IF文に動的に変数を設定する必要があります。

しかし、私は働いて、それを得るために[]{}''""()``の右のセットを見つけることができません。

これについての助けや全く異なるアプローチが役立ちます。

if [ $this == $that ] || [ $that !- $something ]; 

働く必要があります。このような文があれば

答えて

1

あなたはそれを呼び出す前に、グローバル変数を毎回設定しないように、あなたの機能が正しく、そのパラメータをカプセル化する必要があります。おそらくこのようなものでしょう。

#!/bin/bash 

# for portability, don't use the function keyword 
folder_search() { 
    # Don't use uppercase for your private variable names 
    local dir=$1 
    local pat1=$2 
    local pat2=$3 
    local filename base 
    # Don't loop over `find` with for 
    find "$dir" -maxdepth 1 -type f -mmin +5 -name "*.doc" -print | 
    while IFS='' read -r filename; do 
     base=$(basename "$filename") 
     if [[ "$base" == $pat1 || "$base" == $pat2 ]]; then 
      "some commands" 
     else 
      "some other commands" 
     fi 
    done 
} 

#folder 1 
folder_search /tmp/folder1 "ABC[0-9][0-9][0-9].doc" "NL[0-9][0-9][0-9].doc" 

#folder 2 
folder_search /tmp/folder2 "ABC[0-9][0-9][0-9].doc" "B[0-9][0-9][0-9].doc" 

find -print | while readループは、まだ改行を含むファイル名のための堅牢ではありませんが、少なくともこれはあなたの元のコードはしなかったファイル名に水平空白、に対処します。

+0

これは動作しており、実装されています。ありがとう。 – SHLelieveld

-1

はあなたを分離してください。 bash

+2

'[[...]]'から '[...]'に変更する必要はありません。 – chepner

2

論理orオペレータは||です:

if [[ $BASENAME == $NAMECONV1 || $BASENAME == $NAMECONV2 ]] 
+0

私はこれをテストしたと思うし、それは私に正しい結果を与えませんでしたが、私はもう一度試してみます。 – SHLelieveld

+0

これもうまくいくようですが、$ {BASENAME}が – SHLelieveld

+0

の中に置かれている場合にのみ '[[...]]'の中に '$ BASENAME'が引用されているかどうかは関係ありません。 – chepner

関連する問題