私はこのコードを使用しています:
numbzip=`ls *.plt.zip | wc -l` &>/dev/null
コマンドウィンドウで出力を削除してみてください。
.plt.zip で終わるファイルがないので、以下を返します。
ls: cannot access *.plt.zip: No such file or directory
何を試しても、コマンドウィンドウには常にこの行が記録されます。
私は試した:
numbzip=`ls *.plt.zip | wc -l` >/dev/null 2>/dev/null
numbzip=`ls *.plt.zip | wc -l` >/dev/null >>/dev/null 2>/dev/null
ありがとう、ウィルコ。
答え1
出力を解析しないでくださいls
。代わりに検索を使用してください
numbzip=$(find -iname "*.zip" | wc -l)
echo $numzip
答え2
間違ったコンテンツをリダイレクトしているため、このメッセージは引き続き表示されます。
numbzip=`ls *.plt.zip | wc -l` &>/dev/null
これは、コマンドのstderrではなく変数割り当てのstderrをリダイレクトしますls
。ls
内部で実行し、``
外部にリダイレクトします。エラー出力をリダイレクトするには、次をls
使用します。
numbzip=`ls *.plt.zip 2>/dev/null | wc -l`
つまり、上記の方法は単純なファイル名には機能しますが、ファイル名に改行文字が含まれていると失敗します。通常、次のようにする必要があります。出力解析の防止ls
。代わりにシェルワイルドカードを使用できます。
zipfiles=( *.plt.zip )
echo ${#zipfiles[@]}
最初のコマンドは、zipfiles
globと一致するすべてのファイル/ディレクトリの配列を生成します*.plt.zip
。 2 行目は配列の要素数を出力します。