Usando Comandos do Shell para Manipular Caminhos de Arquivo para Uso como Argumentos para Outro Programa

1

Eu posso usar find assim para encontrar uma lista de arquivos:

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

Por exemplo:

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

O que preciso fazer é ler o nome do arquivo:

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

E use-o para gerar esqueletos de teste do PHPUnit com base nas informações contidas no caminho:

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

Para que eu possa executar este comando para cada um:

phpunit-skelgen.phar --test -- Superuseradmin\Model\Mapper\MyMapper \
./src/Superuseradmin/Model/Mapper/MyMapper.php \
./test/Superuseradmin/Model/Mapper/MyMapperTest.php
    
por Gabriel Baker 31.05.2013 / 12:44

3 respostas

4

Aqui está uma tentativa rápida:

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

Dada a seguinte estrutura de diretórios:

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

Deve sair:

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

Você pode salvar isso em um script, verificá-lo e executá-lo. Cuidado com espaços em nomes de arquivos. Eles causarão problemas.

    
por 31.05.2013 / 13:21
0

Você cria um script de 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"

E faça find chamar este script:

find -type f -path "./src*" -name "*.php" -exec /my/script.sh {} \;
    
por 31.05.2013 / 13:24
-1

Provavelmente você quer fazer algo assim:

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
    
por 31.05.2013 / 13:20