首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >命令中间有空格的文件名(不是while/for循环)

命令中间有空格的文件名(不是while/for循环)
EN

Stack Overflow用户
提问于 2019-09-23 16:28:52
回答 2查看 749关注 0票数 0

我试图提供一个文件名列表,其中包含pdftk的空格(将3个PDF合并为一个PDF),但它似乎不喜欢我正在尝试的内容。

代码语言:javascript
复制
# pdftk INPUT1.pdf INPUT2.pdf output OUTPUTFILE.pdf

它可以手动指定文件:

代码语言:javascript
复制
$ pdftk "pdf 1.pdf" "pdf 2.pdf" output t.pdf
$ ls t.pdf
t.pdf (and it works/opens fine)

但下列任何一项似乎都不起作用:

代码语言:javascript
复制
$ pdftk "$(ls --quoting-style=c | tr "\n" " ")" output t.pdf
Error: Unable to find file.
Error: Failed to open PDF file: 
   "pdf 1.pdf" "pdf 2.pdf" "pdf 3.pdf" 
Errors encountered.  No output created.
Done.  Input errors, so no output created.

(注意,在$(ls)周围不使用引号也会失败)

或者这个:

代码语言:javascript
复制
$ ls -1
'pdf 1.pdf'
'pdf 2.pdf'
'pdf 3.pdf'

$ pdftk "$(ls -1 | tr "\n" " ")" output t.pdf
Error: Unable to find file.
Error: Failed to open PDF file: 
   pdf 1.pdf pdf 2.pdf pdf 3.pdf 
Errors encountered.  No output created.
Done.  Input errors, so no output created.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-23 16:55:50

代码语言:javascript
复制
$ pdftk "$(some command)" output t.pdf

这将运行一些命令,然后双引号将输出封装到一个"word“中。无论是什么命令,结果都是pdftk接收到一个包含命令输出的全部参数。

解析ls通常被认为是个坏主意。

正如@RavinderSingh13所建议的那样,仅仅指定*.pdf (甚至*)就可以解决您的问题。shell执行"globbing“来扩展通配符,并将它们正确地拆分为”word“本身:

代码语言:javascript
复制
$ pdftk * output t.pdf

如果您运行的命令不是ls,而是输出了文件名列表,那么您需要谨慎一点,在正确的地方引用。

xargs POSIX规范的“应用程序使用”一节中给出了一些可移植的方法(对命令输出有一些假设)。

使用GNU版本的实用程序的系统(例如。( findxargs)使用非标准的-print0-0和相关命令参数提供了一种更健壮的机制,这些参数假设空字符是用于分隔命令输出项的(唯一)特殊字符。

票数 2
EN

Stack Overflow用户

发布于 2019-09-23 16:43:41

考虑到您一次只想合并3个文件,您可以尝试如下所示,我已经在Ubuntu系统上测试了3个文件(在Ubuntu系统中,它也处理带有空格的文件名)。你可以试一次。

代码语言:javascript
复制
pdftk *.pdf output t.pdf
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58066581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档