2016-05-07 2 views
0

j'ai le ci-dessous stript bash pour imprimer project.json chemins de fichiers:concaténer deux globbings de fichier dans bash

projectDirectories=./src/*/ 
projectJsonFiles=${projectDirectories%%/}/project.json 
for projectFilePath in $projectJsonFiles; do echo $projectFilePath; done 

qui me donne cette sortie:

./src/foo-aspnet-configuration/project.json 
./src/foo.Common/project.json 
./src/foo.bar.MongoDB/project.json 
./src/foo.bar/project.json 
./src/foo.bar.Queries/project.json 
./src/foo.Graph/project.json 
./src/foo-http-frontend/project.json 
./src/foo.Http.Model/project.json 
./src/foo.Infrastructure/project.json 
./src/foo.Search/project.json 

Ce que je veux aussi faire est de liste les fichiers project.json sous le chemin ./workers/*/ mais je ne suis pas sûr de savoir comment le combiner. Mon objectif final est d'être en mesure concaténer deux globbings de fichiers ensemble, quelque chose comme:

projectDirectories=./src/*/,./workers/*/ 
projectJsonFiles=${projectDirectories%%/}/project.json 
for projectFilePath in $projectJsonFiles; do echo $projectFilePath; done 

qui me donnerait:

./src/foo-aspnet-configuration/project.json 
./src/foo.Common/project.json 
./src/foo.bar.MongoDB/project.json 
./src/foo.bar/project.json 
./src/foo.bar.Queries/project.json 
./src/foo.Graph/project.json 
./src/foo-http-frontend/project.json 
./src/foo.Http.Model/project.json 
./src/foo.Infrastructure/project.json 
./src/foo.Search/project.json 
./workers/foo.Sync.Common/project.json 
./workers/foo-sync-foobar/project.json 
./workers/foo-sync-bar/project.json 

mais évidemment, projectDirectories=./src/*/,./workers/*/ ne fonctionne pas. Une idée de comment cela se fait dans bash?

+0

Retirez la virgule. –

Répondre

2

Avec bash GNU 4:

printf -v projectDirectories "%s" ./src/*/ ./workers/*/ 
echo "$projectDirectories" 
+1

merci! Je pense qu'il devrait être 'printf -v projectDirectories"% s "./src/*/ ./workers/* /' pour qu'il fonctionne dans une boucle for. – tugberk

1

Vous devez utiliser un tableau plutôt que de dépendre de ne pas y compris les espaces chemins de fichiers:

dirs=(./src/*/ ./workers/*/) 
for dir in "${dirs[@]}"; do 
    file=${dir}project.json; do 
    echo "$file" 
    done 
done