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

如何用xargs curl读取子目录URLs.txt并在对应子目录下载文件

问题原因

你使用管道cd ... | ...的方式执行命令时,管道会创建子shell来运行cd命令。子shell里的目录切换不会影响父shell的工作目录,后续的ls、curl等命令依然在父目录中执行,所以下载的文件都会保存到父目录里。

解决方法

方法1:用子shell包裹目录切换与下载命令

把cd和后续命令放在括号()内,这样会在独立的子shell中完成目录切换和下载操作,不会干扰父shell的工作目录:

for i in ./*_assay; do
  (cd "$i" && ls URL* | xargs -L 1 -d '\n' zcat | xargs -L 1 curl -O -J -L)
done
  • 加入&&是为了确保只有cd成功进入目标目录时,才执行后续的下载命令,避免目录不存在时无效执行。

方法2:用pushd/popd切换目录

pushd会进入目标目录并记录原目录,popd则会回到之前的目录,适合需要明确切换目录场景:

for i in ./*_assay; do
  pushd "$i" >/dev/null
  ls URL* | xargs -L 1 -d '\n' zcat | xargs -L 1 curl -O -J -L
  popd >/dev/null
done
  • >/dev/null用于屏蔽pushd/popd的默认输出,让命令行输出更简洁。

方法3:用curl的--output-dir参数(需curl 7.73.0+)

如果你的curl版本在7.73.0及以上,可以直接指定下载文件的保存目录,无需切换目录:

for i in ./*_assay; do
  ls "$i"/URL* | xargs -L 1 -d '\n' zcat | xargs -L 1 curl -O -J -L --output-dir "$i"
done
  • 此方法无需切换目录,但要注意版本兼容性,老版本curl不支持--output-dir参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:20:47