使用 Shell 命令操作文件路径以用作另一个程序的参数

使用 Shell 命令操作文件路径以用作另一个程序的参数

我可以find这样使用来查找文件列表:

find -type f -path "./src*" -name "*.php"`  

例如:

./src/Superuseradmin/Model/Mapper/UUID.php
./src/Superuseradmin/Model/Mapper/Mapper.php

我需要做的是读取文件名:

./src/Superuseradmin/Model/Mapper/Mapper/UUID.php  

并使用它根据路径中包含的信息生成 PHPUnit 测试框架:

Superuseradmin\Model\Mapper\UUID  
./test/Superuseradmin/Model/Mapper/UUIDTest.php

这样我就可以为每一个运行此命令:

phpunit-skelgen.phar --test -- Superuseradmin\Model\Mapper\MyMapper \
./src/Superuseradmin/Model/Mapper/MyMapper.php \
./test/Superuseradmin/Model/Mapper/MyMapperTest.php

答案1

这是一个快速尝试:

for i in `find -type f -path "./src*" -name "*.php"`; do echo phpunit-skelgen.phar --test -- `echo $i | sed -e 's!./src/!!' | sed -e 's/.php//' | sed -e 's/\\//\\\/g'` $i `echo $i | sed -e 's!./src/!./test/!' | sed -e 's/.php/Test.php/'`;done

给定以下目录结构:

./src/Superuseradmin/Model/Mapper/MyMapper.php
./src/Superuseradmin/Model/UUID.php

它应该输出:

phpunit-skelgen.phar --test -- Superuseradmin\Model\Mapper\MyMapper ./src/Superuseradmin/Model/Mapper/MyMapper.php ./test/Superuseradmin/Model/Mapper/MyMapperTest.php
phpunit-skelgen.phar --test -- Superuseradmin\Model\UUID ./src/Superuseradmin/Model/UUID.php ./test/Superuseradmin/Model/UUIDTest.php

然后您可以将其保存到脚本中,检查并运行。注意文件名中的空格。他们会带来麻烦。

答案2

您创建一个 shell 脚本:

#! /bin/bash

find_path="./src/Superuseradmin/Model/Mapper/UUID.php"
# find_path="$1"
class="${find_path#./src/}" # Superuseradmin/Model/Mapper/UUID.php
class="${class%.php}" # Superuseradmin/Model/Mapper/UUID
class="${class//\//\\}" # Superuseradmin\Model\Mapper\UUID
classhead="${class%\\*}" # Superuseradmin\Model\Mapper
classtail="${class#"$classhead"}" # \UUID
class="${classhead}${classtail}" # Superuseradmin\Model\Mapper\UUID
# echo "class: '${class}'"

testfile="./test${find_path#./src}"
testfile="${testfile%.php}Test.php"
# echo "testfile: '${testfile}'"

echo phpunit-skelgen.phar --test -- "$class" "$find_path" "$testfile"

并调用find这个脚本:

find -type f -path "./src*" -name "*.php" -exec /my/script.sh {} \;

答案3

也许你想做这样的事情:

cd src
for i in $(find . -type f -name '*.php'); do
 SRC=$i
 DST="../test/$(dirname $i)/$(basename $i php)Test.php"
 echo "copy $SRC to $DST"
 #cp $SRC $DST
done

相关内容