脚本取文件名添加双引号并转换为pdf

时间:2013-03-06 18:33:45

标签: bash sorting pdf-generation

我遇到的情况是我在系统编号的文件夹中有一些pdf

  

文件fd13.pdf文件fd30.pdf文件fd47.pdf文件   fd14.pdf文件fd31.pdf文件fd48.pdf文件fd15.pdf   文档fd32.pdf文件fd49.pdf文件fd16.pdf文件   fd33.pdf文件fd50.pdf

我正在编写一个脚本来将它们转换为pdf

脚本正在关注

    #!/bin/bash
    pdftk "document fd1.pdf" "document fd2.pdf" "document fd3.pdf" 
"document fd4.pdf" "document fd5.pdf" "document fd6.pdf" 
"document fd7.pdf" "document fd8.pdf" "document fd9.pdf" "document fd10.pdf" 
"document fd11.pdf" "document fd12.pdf" "document fd12a.pdf" "document fd12b.pdf" 
"document fd12c.pdf" "document fd12d.pdf" "document fd13.pdf" "document fd14.pdf"
 "document fd15.pdf" "document fd16.pdf" "document fd17.pdf" "document fd18.pdf" 
output out.pdf

这也有效,

我的问题首先是我在目录上做了一个ls

ls ./  > script.sh

然后我必须对单个数字然后是双数字进行排序,因为在这样的ls输出中 文件fd11.pdf 来自文件fd1.pdf
之前 并且还能够将它们用到我的脚本中我必须在文件名“”中添加双引号 这一部分我必须手动完成。

我想自动添加双引号到文件名并按排序顺序获取文件名, 我该如何处理这两个问题?

我在Ubuntu 12.04上

1 个答案:

答案 0 :(得分:1)

这是引用问题。

有关演示,请查看脚本demo1.sh

declare -a args=( "$@" ) 
echo ${#args[@]}  # count the elements of the array args

bash demo1.sh *pdf会为您提供正确数量的pdf文件。

如果您使用脚本demo2.sh

declare -a args=( $@ )
echo ${#args[@]}  # count the elements of the array args

bash demo2.sh *pdf会为您提供个pdf文件。 相反,它会对每个文件计算两次。

有关说明,请参阅man bash

  

@从1开始扩展到位置参数。当扩展发生在双引号内时,每个                 参数扩展为单独的单词。也就是说,“$ @”相当于“$ 1”“$ 2”...如果双引号扩展 -                 sion出现在一个单词中,第一个参数的扩展与原始的部分连接起来                 单词,并且最后一个参数的扩展与原始单词的最后部分连接。什么时候有                 没有位置参数,“$ @”和$ @扩展为空(即,它们被移除)。

以下脚本应该有效:

#!/bin/bash
pdftk "${@}" output out.pdf

你可以用:

调用它
ls -Q -v *.pdf |xargs script
相关问题