2013-10-07 5 views
0

J'ai une exigence où je dois lire les noms des sous-répertoires et copier les noms dans un fichier. Voici le code que j'ai écrit.Script shell: pour la sortie inattendue de la boucle

for file in $HOME/AutoQA/screenshots/* 
do 
if [ -d "$file" ]; 
    then 
     echo "$file" >> $HOME/AutoQA/FailedTestCases.txt 
    fi 
done 

Maintenant, le code ci-dessus fonctionne presque parfaitement, mais la sortie que je reçois est quelque chose comme

/home/AutoQA/screenshots/1 
/home/AutoQA/screenshots/2 
...... 

Mais je pensais que ce serait comme suit

1 
2 
.... 

Je dois seulement noms des sous-répertoires. Ici, avant d'exécuter la boucle for, je ne veux pas faire

cd /home/AutoQA/screenshots/ 

Comment puis-je gérer cela? Quelqu'un peut-il aider?

+0

Si vous ajoutez un arrière '/' à votre glob, il étendra aux noms de répertoire uniquement, en supprimant la nécessité de la déclaration 'if' . – chepner

Répondre

2

Remplacer la ligne

echo "$file" >> $HOME/AutoQA/FailedTestCases.txt 

avec

basename "$file" >> $HOME/AutoQA/FailedTestCases.txt 
+0

Cette astuce a fonctionné! – user1305398