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

如何使用Bash遍历目录及子目录所有文件并调用指定PHP命令处理

可行实现方案

直接使用Linux自带的find命令即可实现,它原生支持递归遍历目录,且能正确处理带空格、特殊字符的文件名,完全适配你提到的带空格的目录场景。

方案1:单行命令直接执行

如果是单次使用,直接运行如下命令即可,将示例中的./293 House Street替换为你实际的顶级目录路径,地址参数-a的值也同步修改即可:

find "./293 House Street" -type f -exec bash -c '
  for file in "$@"; do
    php process_directories.php -a "293 House Street" -p "$(dirname "$file")" -f "$(basename "$file")"
  done
' bash {} +

参数说明:

  • -type f 仅匹配文件,自动跳过目录本身
  • 所有变量统一包裹双引号,避免路径/文件名带空格时执行报错
  • $(dirname "$file") 自动提取文件所在路径,对应你需要的PATH_OF_FILE参数
  • $(basename "$file") 自动提取文件名,对应你需要的FILE参数
  • -exec ... + 批量传递找到的文件给循环处理,比逐个触发命令执行效率更高

方案2:可复用脚本

如果需要经常使用,可写成通用bash脚本,不用每次手动修改参数:

  1. 新建process_images.sh文件,写入以下内容:
#!/bin/bash

# 参数校验
if [ $# -ne 2 ]; then
  echo "用法: $0 <顶级目录路径> <地址参数>"
  exit 1
fi

TOP_DIR="$1"
ADDR="$2"

# 遍历执行php命令
find "$TOP_DIR" -type f -exec bash -c '
  target_addr="$1"
  shift
  for file in "$@"; do
    php process_directories.php -a "$target_addr" -p "$(dirname "$file")" -f "$(basename "$file")"
  done
' bash "$ADDR" {} +
  1. 给脚本添加执行权限:
chmod +x process_images.sh
  1. 执行示例:
./process_images.sh "./293 House Street" "293 House Street"

可选优化

如果只需要处理特定格式的图片文件,可以在find命令中添加后缀过滤规则,跳过非图片文件减少无效执行,示例如下(可自行增减需要匹配的后缀):

find "$TOP_DIR" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" -o -iname "*.gif" -o -iname "*.webp" \) -exec ...

内容的提问来源于stack exchange,提问作者J.Do

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:39:00