2017-09-28 3 views
0

が、私はその後、特別な名前のファイルを削除して、私のディレクトリおよびサブディレクトリ 内のすべてのファイルに目を通すしたいbashで許可されていないメッセージを取得せずにファイル名を比較するにはどうすればよいですか?

ここ

for filename in $1*;do 
    if("$filename" == "hello.txt");then 
      echo "WOW!" 
    fi 
    done 

私のテストディレクトリがTESTである私のコードで/と2つのファイルがあります。 1名が "hello.txt" と "world.txt";私は、コードを実行したときしかし、私は、コマンドchmod u+x scriptnameを試してみました

noStrange.sh: line 2: TEST/hello.txt: Permission denied 
noStrange.sh: line 2: TEST/world.txt: Permission denied 

受け取り、それはこれがどのようなI入力され

を動作しません。

sh scriptname TEST/ 

誰でもスクリプトに間違いがあると教えていただけますか?

答えて

1

basenameコマンドを使用して、ファイルパス変数からファイルのベース名を取得します。

for filename in $1*;do if [[ $(basename "$filename") == "hello.txt" ]] ; then echo "wow";fi; done 

それとも

使用するコマンドを見つけます。これは、現在のフォルダ内に存在するすべてのファイルを検索し、サブフォルダも検索します。

find . -name 'hello.txt' 
1

すぐに答えが出されるのは、テストの構文が間違っていることです。あなたはしかし、あなたのコードを持ついくつかの問題がある

if ["$filename" == "hello.txt"]; then

などを持っている必要があります。 $filenamehello.txtの代わりにTEST/hello.txtと一致するため、必要な動作を得られない可能性があります。あなただけの特定の名前のファイルを削除するために探している場合も、あなたはおそらく、あなたが削除しないしたいパターンがある場合、あなたはグロブ/ワイルドカード、またはAを使用することができます

rm TEST/hello.txt

のような通常のUNIXコマンドを望みますfind,xargsおよびrmの組み合わせ。例えば。

find TEST -name 'hello*.txt' | xargs rm

+0

テスト式では、角かっこの周囲にスペースが必要です。また、 '=='は非標準のbashismですが、 '[]'では '='だけを使う方が良いでしょう。 –

関連する問題