CygWinで大きなディレクトリで「ls -R」を実行し、出力をTest.txtファイルに送信してテストしたので、プロセスが完了するまで約30秒かかります。ファイルは作成されますが、空です。「ls -R」コマンドが終了したときにのみ入力され、新しいデータの入力中にファイルの内容を確認する必要があります。
この問題は、ファイルに書き込む前にオペレーティングシステムが行うバッファリングが原因であると考えられています。
これは、バッファリングせずにファイルに書き込むためにテストしたものです。
- パッケージのunbufferコマンド
expect:どこにありますか?最新expectバージョンには、そのようなunbufferコマンドはありません(以下を参照)。
./unbuffer -p ls / cygdrive / y / Repositorio / -R> Test.txt
./unbuffer ls / cygdrive / y / Repositorio / -R | tee Test.txt
./unbuffer -p ls / cygdrive / y / Repositorio / -R | tee Test.txt
./unbuffer ls / cygdrive / y / Repositorio / -R | ./unbuffer -p egrep "" | tee Test.txt
./unbuffer -p ls / cygdrive / y / Repositorio / -R | ./unbuffer -p egrep "" | tee Test.txt
- Expectパッケージをインストールし、このスクリプトに「unbuffer」という名前を付けます。
#!/ usr / bin / expect-
#説明:プログラムの標準出力をアンバッファー
#著者:Don Libes、NIST
eval spawn -noecho $ argv
タイムアウト-1を設定
期待する
- Expectパッケージをインストールし、この他のスクリプトに「unbuffer」という名前を付けます。
#!/ usr / bin / expect-
#説明:プログラムの標準出力をアンバッファー
#著者:Don Libes、NIST
if {[string compare [lindex $ argv 0] "-p"] == 0} {
#パイプライン
stty_init "-echo"を設定します
eval spawn -noecho [lrange $ argv 1 end]
close_on_eof -i $ user_spawn_id 0
相互作用{
eof {
#残りの出力を子からフラッシュ
expect -timeout 1 -re。+
帰る
}
}
} else {
stty_init "-opost"を設定します
タイムアウト-1を設定
eval spawn -noecho $ argv
期待する
}
- スクリプトコマンド:
スクリプト-c "ls / cygdrive / y / Repositorio / -R" | tee Test.txt
スクリプト-c "ls / cygdrive / y / Repositorio / -R" / dev / null | tee Test.txt
スクリプト-q -c "ls / cygdrive / y / Repositorio / -R" / dev / null | tee Test.txt
スクリプト-q -c "ls / cygdrive / y / Repositorio / -R" / dev / null | grep "" --line-buffered | tee Test.txt
スクリプト-q -c "ls / cygdrive / y / Repositorio / -R" / dev / null | egrep "" --line-buffered | tee Test.txt
- egrepののアンバッファリングオプションを指定したコマンドを実行します。
cat BigFile.txt | egrep "" --line-buffered | tee Test.txt
stdbuf:それは現代のCygwinでは存在しない、またはので、私は思います。
別の方法:
ls / cygdrive / y / Repositorio / -R 1>&2 | tee Test.txt
ls / cygdrive / y / Repositorio / -R 1>&2 |&tee Test.txt
行わテスト
bashとmintty。これらのスレッドのすべてをチェックしてテストしました。
「tail -f」出力を別のファイルに書き込む
https://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe
https://serverfault.com/questions/294218/is-there-a -way-to-redirect-output-to-a-file-without-buffering-on-unix-linux
結果は常に同じです。出力ファイルTest.txtは、「ls -R」コマンドの最後にのみ書き込まれます。
他にアイデアはありますか?
lsはそれよりも速く64 kbを埋めることを期待しています。それでも問題が解決しない場合は、結果のサイズを教えてくださいTest.txt。