1 votes

Bash script - trouver un répertoire, et y faire quelque chose. Ou trouver un fichier, et faire quelque chose avec lui.

Voici ce que j'ai jusqu'à présent :

for f in 'svn ls repository_dir'; 
do 
svn checkout repository_dir/$f/trunk/dir1/dir2/dir3/dir4/needed_dir 
done

Cela fonctionne très bien pour les projets (des centaines) qui ont le répertoire nécessaire au bon endroit. Mais certains projets ($f) ont une structure de répertoire un peu différente. Ainsi, "needed_dir" peut se trouver à un endroit différent.

Dans la boucle do Comment puis-je dire à mon script bash de.. :

"Trouvez le "répertoire nécessaire". S'il est trouvé, vérifiez-le".

Ou

"Trouver "fichier_nécessaire.txt". S'il est trouvé, vérifiez-le."

Merci pour toute aide

1voto

Dennis Points 46916

Ce sera probablement plus facile avec trouver .

Pour exécuter svn checkout ou chaque répertoire nommé needed_dir dans l'arborescence des répertoires de repository_dir/$f/trunk utilisez cette commande :

find repository_dir/$f/trunk/ -type d -name needed_dir -exec svn checkout {} \;

Trouver des substituts {} avec le nom du répertoire trouvé.

L'interrupteur -type d ne trouve que les répertoires, tandis que -type f ne trouve que les fichiers.

0voto

Maik Röder Points 311

Désolé, je n'ai pas assez de réputation pour commenter, je dois donc créer une nouvelle réponse.

El find ne fonctionnera pas ici car elle ne peut rechercher qu'un répertoire sur le disque. (Donc cela ne fonctionnerait que si vous vérifiez d'abord par svn l'intégralité de "repository_dir").

Ver le lien suivant sur StackOverflow pour une question similaire. Une réponse similaire à celle donnée ici est plus appropriée :

for f in 'svn ls -R repository_dir | grep "needed_dir"'; 
do 
svn checkout repository_dir/$f
done

L'option -R de svn fait que svn liste tout à l'URL de manière récursive. Grep recherche le répertoire dont vous avez besoin.

Pour ce que cela vaut, vous pouvez rendre cela un peu plus laconique en utilisant la fonction xargs au lieu d'un boucle for.

svn list -R <URL> | grep "needed_dir" | xargs --max-args=1 -I'{}' svn co <URL>'{}'

Xargs exécute "svn co (path-in-url)" pour chaque mot délimité par des espaces blancs découvert par svn list et grep. (Le bizarre -I '{}' est nécessaire sinon xargs met un espace entre l'URL et le nom du sous-répertoire).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X