2017-04-11 6 views
0

私は一連のテキストファイルを反復処理(すべてのフォームname.txtである)というループを持っている:リテラルパターンをループするパターンに一致するファイルを反復するループを防止しますか?

for txt in *txt; do 
    sed -i '$ d' $txt 
done 

しかし、ディレクトリには.txtファイルが存在しない時はいつでも、私は、次のエラーメッセージが表示されます。

sedの

:それはすべてのファイルに一致していないと「TXT」を残すことはなく、あなたがWH期待やっているので、それはだ、このようなファイルやディレクトリ

+0

あなたは 'sedを-i '$ dの' $ txt' –

+0

を意味したはい、それはタイプミスでした。 – D1X

答えて

0

次の2つの方法でこの問題を解決することができます。

をa)は、それ

for txt in *txt; do 
    [[ -f "$txt" ]] || continue # skip if file doesn't exist or if it isn't a regular file 
    # your logic here 
done 

Bで何かを行う前に、ファイルの存在をチェック)グロブは何にも展開さを確認しますシェルオプションshopt -s nullglobを使用一致するファイルが存在しない場合

shopt -s nullglob 
for txt in *txt; do 
    # your logic here 
done 

も参照してください:

0

ありません:「* TXT」を読み取ることができませんichはforループをスキップすることです。いくつかの実装(例えばmacOS)では、文字列を '* txt'のままにして、変数txtを* txtに設定してforループを実行します。 for-loopを実行する前に、まずファイルパターンの存在をテストする必要があります。 Check if a file exists with wildcard in shell scriptを参照してください。

関連する問題