我的shell脚本将文件上传到服务器。我希望stdout和stderr同时写入文件和控制台。但我不希望stderr的进度条/百分比保存到文件中。我只想让curl错误写入文件。
最初我有这个
curl ... 2>> "$log"这会将一行或多行下载内容写到日志文件中,但不会写到控制台中。
然后我将其更改为
curl ... 3>&1 1>&2 2>&3 | tee -a "$log"这写到了控制台和文件,耶!除了它将每个百分比的整个进度写入文件之外,这使得日志文件非常大,读取起来非常乏味。
如何在控制台中查看进度,但只将输出的最后一部分写入文件?
我想要这个
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
106 1166 0 0 106 1166 0 2514 --:--:-- --:--:-- --:--:-- 2 106 1166 0 0 106 1166 0 795 0:00 :01 0:00:01 --:--:-- 0 106 1166 0 0 106 1166 0 660 0:00:01 0:00:01 --:--:-- 0这是我使用第二个curl重定向得到的结果
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 9.8G 0 0 0 16384 0 24764 4d 22h --:--:-- 4d 22h 24764
0 9.8G 0 0 0 3616k 0 4098k 0:41:54 --:--:-- 0:41:54 15.9M
0 9.8G 0 0 0 24.2M 0 12.9M 0:12:59 0:00:01 0:12:58 19.8M
0 9.8G 0 0 0 50.4M 0 17.5M 0:09:34 0:00:02 0:09:32 22.7M
0 9.8G 0 0 0 79.8M 0 20.5M 0:08:09 0:00:03 0:08:06 24.7M
1 9.8G 0 0 1 101M 0 20.7M 0:08:04 0:00:04 0:08:00 24.0M
1 9.8G 0 0 1 129M 0 21.9M 0:07:37 0:00:05 0:07:32 25.1M
1 9.8G 0 0 1 150M 0 21.8M 0:07:41 0:00:06 0:07:35 25.1M
1 9.8G 0 0 1 169M 0 21.5M 0:07:47 0:00:07 0:07:40 23.8M
1 9.8G 0 0 1 195M 0 21.9M 0:07:38 0:00:08 0:07:30 23.0M
2 9.8G 0 0 2 219M 0 22.1M 0:07:33 0:00:09 0:07:24 23.5M
2 9.8G 0 0 2 243M 0 22.4M 0:07:29 0:00:10 0:07:19 22.9M
2 9.8G 0 0 2 273M 0 22.9M 0:07:17 0:00:11 0:07:06 24.6M
..
.. hundreds of lines...
..
99 9.8G 0 0 99 9982M 0 24.8M 0:06:45 0:06:41 0:00:04 24.5M
99 9.8G 0 0 99 9.7G 0 24.8M 0:06:44 0:06:42 0:00:02 24.9M
99 9.8G 0 0 99 9.8G 0 24.8M 0:06:44 0:06:43 0:00:01 26.0M
100 9.8G 0 0 100 9.8G 0 24.8M 0:06:44 0:06:44 --:--:-- 25.8M编辑:我不理解的是根据http://www.tldp.org/LDP/abs/html/io-redirection.html
2>filename
# Redirect stderr to file "filename."但是如果我使用它,我不会得到文件中的每一个stderr进度行。如果我尝试任何其他解决方案,每个stderr进度行都会被重定向到文件
发布于 2016-01-05 02:26:23
正如视频是一系列的帧一样,控制台中的更新百分比是一系列的行。文件中的内容是真实的输出。不同之处在于,文本文件中的回车会将以下文本放在下面,而在控制台中,它会覆盖当前行。
如果您想在控制台中查看更新百分比,而不是文件,您可以使用类似以下内容:
curl |& tee >(sed '1b;$!d' > log)或者:
curl |& tee /dev/tty | sed '1b;$!d' > log发布于 2016-01-06 13:52:14
假设您有10个巨大的.txt文件test1.txt ... test10.txt
下面是如何使用单个cURL命令上传它们,并记录结果而不记录进度,诀窍是使用--write-out或-w选项,从man file,这些都是上传到FTP的相关字段:
curl -T "test[1-10:1].txt" -u user:password sftp://example.com:22/home/user/ -# -k -w "%{url_effective}\t%{ftp_entry_path}\t%{http_code}\t%{http_connect}\t%{local_ip}\t%{local_port}\t%{num_connects}\t%{num_redirects}\t%{redirect_url}\t%{remote_ip}\t%{remote_port}\t%{size_download}\t%{size_header}\t%{size_request}\t%{size_upload}\t%{speed_download}\t%{speed_upload}\t%{ssl_verify_result}\t%{time_appconnect}\t%{time_connect}\t%{time_namelookup}\t%{time_pretransfer}\t%{time_redirect}\t%{time_starttransfer}\t%{time_total}\n" >> log.txt
对于log.txt文件,您可能需要先添加列标题:
echo -e "url_effective\tftp_entry_path\thttp_code\thttp_connect\tlocal_ip\tlocal_port\tnum_connects\tnum_redirects\tredirect_url\tremote_ip\tremote_port\tsize_download\tsize_header\tsize_request\tsize_upload\tspeed_download\tspeed_upload\tssl_verify_result\ttime_appconnect\ttime_connect\ttime_namelookup\ttime_pretransfer\ttime_redirect\ttime_starttransfer\ttime_total" > log.txt -#使进度条更整洁,如:######################################################################## 100.0% ######################################################################## 100.0%
curl -T "test[1-10:1].txt"片段允许您指定要上传的文件范围。
https://stackoverflow.com/questions/34597210
复制相似问题