首页 > 解决方案 > 使用 Bash 并调用 php 命令遍历目录和子目录中的所有文件

问题描述

我对 bash 脚本非常陌生,但我正在寻找构建一个基本上通过目录及其子目录和文件的脚本。

顶层目录将是图像的位置,因此顶层可能是“293 House Street”,其中将是每个房间“浴室”、“厨房”等的子目录,并且在这些子目录中将是图像。也可能在顶层找到图像。

一旦找到文件,我想基本上调用 PHP 命令并为要使用的数据提供一些参数。

php process_directories.php -a "293 House Street" -p "PATH_OF_FILE" -f "FILE"

-a将是地址 // 对于在当前目录中找到的每个文件,这将始终相同。

-p将是文件的路径

-f将是文件。

有没有一种好方法可以制作这样的脚本?

标签: phpbash

解决方案


我认为您不能直接使用命令执行此操作,find但您可以使用 Bash 遍历其结果:

#!/usr/bin/env bash

while IFS= read -d '' -r filepath
do
    dirpath="${filepath%/*}"
    filename="${filepath##*/}"
    php process_directories.php -a "293 House Street" -p "$dirpath" -f "$filename"
done < <(find . -type f -print0)  
  • ${filepath%/*}$filepath/删除了最后一个到最后(即目录路径)。
  • ${filepath##*/}$filepath但从启动到最后一次/删除(即文件名)。
  • find . -type f将输出当前目录及其子目录下的所有文件,以 为前缀./,保证上面两个项目符号正常工作。
  • 通过使用字节作为分隔符,组合选项确保-print0find可以正确处理每个路径(在 Linux 文件系统中,它可以由任何字符组成,但.read -d ''NULLNULL

备注:你也可以修改你的 PHP 脚本来做同样的事情,而不是使用 Shell


推荐阅读