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
シェルスクリプトを生成します。
#! /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