2010-04-23 15 views
1

J'essaye d'analyser les fichiers/répertoires dans un répertoire en utilisant un script shell, par exemple si le fichier est lisible, s'il s'agit d'un fichier, s'il s'agit d'un répertoire, etc. Mon script est configuré pour prendre un répertoire en entrée. donc je taperais 'file.sh directoryname'. Toutefois, lorsque je crée une boucle for pour analyser les fichiers, elle analyse les fichiers dans mon répertoire de travail actuel plutôt que le nom de répertoire spécifié.Lecture dans le répertoire, script shell Unix

C'est mon code cassé:

file=$1 
set mypath = $file 
for file in $mypath * 
do 

if [ -d $file ] 
    dirCount=`expr $dirCount + 1` 
fi 

done 

Pourquoi cette lecture le répertoire de travail au lieu du répertoire spécifié? Toute aide est appréciée. Merci

+0

Sinon, vous pouvez toujours le faire: trouver dirname -type f -maxdepth 1 – Jon

+0

Drop the -maxdepth 1 pour un compte récursive – Jon

Répondre

1

Je pense que vous avez une erreur ici:

set mypath = $file 

Il suffit de faire

mypath = $file 

et qui devrait fonctionner très bien.

1
# check this one  
file=$1 
mypath=$file 
dirCount=0 
#ls $file 
for file in `ls $mypath` 
do 
file=./$mypath/$file 
#a=`ls -l $file` 
echo $a 
if [ -d $file ] 
then 
    dirCount=`expr $dirCount + 1` #increment count 
     echo $dirCount 
fi 
done 

#if count value is grater than 1 then only print value 
if [ $dirCount -ne 0 ] 
then 
echo -e "\ncount is $dirCount $$" 
fi 
0

vous pouvez l'essayer. mais le script entrera en conflit lorsque le nom du dossier aura un espace vide.

#/bin/bash 
path=$1 
for file in $path/* 
do 
if [ -d $file ];then 
    dirCount=`expr $dirCount + 1` 
fi 
done 
echo $dirCount 
Questions connexes