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
。