当前位置: 首页 > 面试题库 >

如何在Linux中的命令中间传递带有xargs的所有参数

梁丘波鸿
2023-03-14
问题内容

我想在Linux上将所有文件作为单个参数传递,但是我不能这样做。

这工作

ls | sort -n | xargs  -i pdftk  {} cat output combinewd2.pdf

每个命令都传递一个参数,但是我希望所有命令都包含一个参数。


问题答案:

这是做到这一点的一种方法

pdftk $(ls | sort -n) cat output combinewd2.pdf

或使用反引号

pdftk `ls | sort -n` cat output combinewd2.pdf

正如评论中指出的那样,这不适用于包含空格的文件名。在这种情况下,您可以使用eval

eval pdftk $(while IFS= read -r file; do
    echo \"$file\"
done < <(ls | sort -n)) cat output combinewd2.pdf

假设有两个名为“ 0 foo”和“ 1 bar”的文件,那么eval的结果将是所需的命令,文件名用双引号引起来:

pdftk " 0 foo " " 1 bar " cat output combinewd2.pdf

如果文件名中可能包含换行符,请使用find命令,请参阅@joeytwiddle在@andrewdotn答案中的讨论。以下解决方案还使用sed命令转义双引号来处理带双引号的文件名:

eval pdftk $(while IFS= read -r -d '' file; do
    echo \"$file\"
done < <(find . -maxdepth 1 -type f -print0 | \
    sed 's/"/\\"/g'| sort -zn)) cat output combinewd2.pdf


 类似资料:
  • 问题内容: 我需要稍后再运行一个mail.php文件,而不是让用户在提交register.php时等待发送验证电子邮件。 因此,我选择在1分钟后使用 at 命令在命令行中运行mail.php( 在register.php 中 调用 ): 但是,当我处于at命令的交互模式时,我只能将参数发送到该php文件。 由于我希望这是自动的,因此我需要在运行时使用shell脚本: 但是我找不到传递 {email

  • 问题内容: 我有一个简单的Python脚本,可以接收用户名和密码作为参数,但是我的密码包含两个感叹号。当我像这样调用脚本时 我之前输入的命令将替换感叹号: 我可以使用反斜杠()避开感叹号,但密码会更改。 是否有解决方案,如何在不更改密码的情况下转义感叹号? 问题答案: 您应该能够简单地在外壳中用单引号引起来。

  • 问题内容: 作为作业的一部分,我必须调试一个有错误的程序。但是,我必须先传递命令行参数才能解决此问题。 我做: 哪个可行,但是之后我不知道如何传递参数。我用过,它说了一些我也尝试过的方法,但是没有用。 我希望能够获得调试器+ GUI并传递命令行参数。 问题答案: 一旦启动,您可以使用“ r args ” 运行程序。 因此,如果您通过以下方式运行代码: 通过以下方法调试:

  • 我正在尝试从groovy中使用shell命令< code > notify-send-t 2000 " Title " " Message " ,以下一种方式< code > " notify-send-t 2000 \ " Title \ " \ " Message \ "。execute()就可以完美地工作了。但是当我试图用表达代替信息时,似乎什么都不管用。下面是代码片段: 能帮我理解一下吗?

  • 我有一个使用ExpressJS构建的NodeJS应用程序。在安全审查之后,有人建议我在所有表单和ajax提交上实现CSRF。为此,我使用了csurf包。为此,我们需要在每个表单页面中传递CSRF令牌,然后将其与表单提交数据一起返回。 首先,我尝试对包含表单的页面单独执行此操作。但后来我意识到我的页面标题中有一个搜索表单,它出现在所有页面上。现在,是否有任何方法可以将CSRF令牌传递给我的所有视图,

  • 问题内容: 我的.aliases中具有以下别名: 并且我想在名称中包含字符串的所有文件中查找不区分大小写的内容: 这是我得到的: 有什么方法可以在xargs中使用别名,还是必须使用完整版本: 注意: 这是一个简单的示例。此外,我还有一些非常复杂的别名,无法轻易手动扩展。 编辑: 我用过,所以请指定答案是否特定于外壳。 问题答案: 别名是外壳特定的- 在这种情况下,很可能是bash特定的。要执行别名