如何在Bash脚本中指定动态路径下的this.json作为Python脚本输入?
解决Bash中传递嵌套目录下JSON文件路径给Python脚本的问题
方法1:使用Bash通配符(Glob)直接匹配
你的目录结构对应路径模式为base/rbbc_*/rbbp_*/this.json,直接用这个通配符就能定位所有目标文件,无需依赖ls。
如果Python脚本支持一次性处理多个文件,直接传递所有路径:
python something.py base/rbbc_*/rbbp_*/this.json
如果脚本一次只能处理一个文件,用for循环逐个处理,务必用双引号包裹变量(避免文件名含空格、特殊字符时被错误拆分):
for json_path in base/rbbc_*/rbbp_*/this.json; do python something.py "$json_path" done
方法2:用find命令(更适合复杂场景)
如果目录层级更深、文件名包含特殊字符(比如空格、换行符),或者需要更精确的过滤,find命令是更可靠的选择:
逐个处理文件
find base -type f -path "*/rbbc_*/rbbp_*/this.json" -exec python something.py {} \;
-type f:仅查找文件(排除目录)-path "*/rbbc_*/rbbp_*/this.json":匹配符合路径模式的文件-exec ... {} \;:对每个找到的文件执行Python脚本,{}代表当前匹配到的文件路径
一次性传递所有文件路径
如果脚本支持接收多个文件路径作为参数,用+代替\;,可减少进程启动开销:
find base -type f -path "*/rbbc_*/rbbp_*/this.json" -exec python something.py {} +
为什么用ls会出问题?
ls的输出是为人类阅读设计的,当文件名包含空格、制表符或换行符时,Bash会错误地将这些字符视为参数分隔符,导致路径被拆分成多个无效参数。直接用通配符或find命令能避免这个问题,因为它们会正确处理带特殊字符的文件名。
内容的提问来源于stack exchange,提问作者KansaiRobot
相关产品推荐
相关产品推荐

