You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用xargs对含单双引号的文件名执行bash -c命令

问题原因

你原有命令的核心问题是将xargs的占位符{}直接嵌入到bash -c的命令字符串中,文件名包含的单/双引号会直接破坏命令语法结构,不仅会执行失败,还存在命令注入风险。

修复方案

利用bash -c的位置参数特性传递文件名,完全不需要将文件名拼接到命令字符串中,可兼容所有合法文件名(包含空格、单引号、双引号、换行等特殊字符),修改后命令如下:

find . -maxdepth 1 | onlyvideos | tr '\n' '\0' | xargs -n1 -0 bash -c 'if ffmpeg -i "$1" 2>&1 | grep Stream | grep -q vorbis ; then echo "$1" ; fi' _

关键修改说明

  • bash -c后的单引号包裹了整个命令逻辑,内部不会被外部特殊字符打断
  • 末尾的_是占位符,用于填充bash -c的$0位置,xargs传入的文件名会自动作为$1传入子shell
  • 命令内对$1的引用全程加双引号,避免文件名中的空格、通配符被意外展开
  • 完全移除了命令字符串中拼接文件名的逻辑,从根源解决特殊字符导致的语法问题

内容的提问来源于stack exchange,提问作者localhost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 23:54:04