使用命令行重定向输入和输出

时间:2012-07-03 20:38:03

标签: linux

以下内容有效,可将/tmp/file.docx转换为/tmp/file.pdf

libreoffice3.5. --headless --convert-to pdf --outdir /tmp /tmp/file.docx

如何转换https://www.mysite.com/getfile.php?id=123(将返回docx文件)并将其保存为/tmp/file_123.pdf?我希望它需要wget,管道和输入/输出重定向。

谢谢

编辑 - 回应zebediah49的帖子

> libreoffice3.5 --headless --convert-to pdf --outdir /tmp <(wget -O - "http://www.mysite.com/demo/lib/m.php?cid=9&controller=detail&task=displayDocument&id=56&x=fc872c033770e3bc8706e6a90bcdff02")

--2012-07-03 14:09:03--  http://www.mysite.com/demo/lib/m.php?cid=9&controller=detail&task=displayDocument&id=56&x=fc872c033770e3bc8706e6a90bcdff02
Resolving www.mysite.com... 99.999.999.999
Connecting to www.mysite.com|99.999.999.999|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 29696 (29K) [application/msword]
Saving to: `STDOUT'

     0K .......... .......... .........                       100% 14.2M=0.002s

2012-07-03 14:09:03 (14.2 MB/s) - `-' saved [29696/29696]

编辑 - 响应rekire的第一个解决方案

> wget http://www.mysite.com/demo/lib/m.php?cid=9&controller=detail&task=displayDocument&id=56&x=fc872c033770e3bc8706e6a90bcdff02 --no-check-certificate -O /tmp/file.docx
--2012-07-03 14:34:12--  http://www.mysite.com/demo/lib/m.php?cid=9
Resolving www.mysite.com... bash: --no-check-certificate: command not found
99.999.999.999
Connecting to www.mysite.com|99.999.999.999|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1236 (1.2K) [text/html]
Saving to: `m.php?cid=9.8'

     0K .                                                     100% 42.1M=0s

2012-07-03 14:34:12 (42.1 MB/s) - `m.php?cid=9.8' saved [1236/1236]

> libreoffice3.5 --headless --convert-to pdf --outdir /tmp /tmp/file.docx

编辑 - 响应rekire的第二个解决方案

> TMPFILE=`mktemp -u`
> wget http://www.mysite.com/demo/lib/m.php?cid=9&controller=detail&task=displayDocument&id=56&x=fc872c033770e3bc8706e6a90bcdff02 --no-check-certificate -O $TMPFILE
--2012-07-03 14:24:09--  http://www.mysite.com/demo/lib/m.php?cid=9
Resolving www.mysite.com... bash: --no-check-certificate: command not found
99.999.999.999
Connecting to www.mysite.com|99.999.999.999|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1236 (1.2K) [text/html]
Saving to: `m.php?cid=9.5'

     0K .                                                     100% 42.1M=0s

2012-07-03 14:24:09 (42.1 MB/s) - `m.php?cid=9.5' saved [1236/1236]


> libreoffice3.5 --headless --convert-to pdf --outdir /tmp $TMPFILE

2 个答案:

答案 0 :(得分:3)

如果您想要一行,可以使用重定向来执行

libreoffice3.5. --headless --convert-to pdf --outdir /tmp <(wget -O - "https://www.mysite.com/getfile.php?id=123")

编辑:

我担心libreoffice在使用--convert-to时可能不允许保存名称。如果您愿意,这里的版本将使用临时目录,但将输出保存在当前目录中(我假设您不想通过/ tmp来查找您的内容......

TEMP_DIR=`mktemp -d`
wget -P "$TEMP_DIR" "https://www.mysite.com/getfile.php?id=123"
libreoffice3.5. --headless --convert-to pdf --outdir ./ "$TEMD_DIR/*"
rm -r "$TEMP_DIR"

我将它格式化为好像是在脚本中...如果你只是自己运行它就可以知道你不会破坏任何东西和/或在当前目录中执行所有操作,从而只需使用

wget "https://www.mysite.com/getfile.php?id=123"
libreoffice3.5. --headless --convert-to pdf "getfile.php?id=123"

答案 1 :(得分:2)

根据你的命令,这两行应该有效:

wget https://www.mysite.com/getfile.php?id=123 --no-check-certificate -O /tmp/file.docx
libreoffice3.5. --headless --convert-to pdf:outfile.pdf --outdir /tmp /tmp/file.docx

或者像zebediah49用独特的文件名说:

TMPFILE=`mktemp -u`
wget https://www.mysite.com/getfile.php?id=123 --no-check-certificate -O $TMPFILE
libreoffice3.5. --headless --convert-to pdf:outfile.pdf --outdir /tmp $TMPFILE

请注意:每次运行都会覆盖outfile,因此您还应该为输出文件使用唯一的名称。