web-dev-qa-db-fra.com

Script Shell en boucle dans tous les fichiers d'un dossier

Je veux écrire un script qui va parcourir tous les fichiers d’un dossier et afficher "put $ {nomfichier}". Est-ce que quelqu'un peut-il me montrer la bonne direction?

16
skline

Pour les fichiers et les répertoires, pas récursif

for filename in *; do echo "put ${filename}"; done

Pour les fichiers uniquement (exclut les dossiers), pas récursif

for file in *; do 
    if [ -f "$file" ]; then 
        echo "$file" 
    fi 
done

Pour une solution récursive, voir la réponse de Bennet Yee.

21
Oliver Charlesworth

récursivement, y compris les fichiers dans les sous-répertoires?

find dir -type f -exec echo "put {}" \;

seuls les fichiers de ce répertoire?

find dir -maxdepth 1 -type f -exec echo "put {}" \;
6
Bennet Yee

Pour tous les dossiers et fichiers du répertoire en cours

for file in *; do
    echo "put $file"
done

Ou, si vous souhaitez inclure uniquement des sous-répertoires et des fichiers:

find . -type f -exec echo put {} \;

Si vous souhaitez inclure les dossiers eux-mêmes, extrayez la partie -type f.

5
Kevin

Si vous n'avez aucun fichier, alors au lieu d'imprimer *, nous pouvons le faire. 

format=*.txt
for i in $format;
do
 if [[ "$i" == "$format" ]]
 then
    echo "No Files"
 else
    echo "file name $i"
 fi
done
2
Mad-D

Une alternative supplémentaire en utilisant ls et sed:

$ ls -1 <dir> | sed -e 's/^/put /'

et en utilisant ls et xargs:

$ ls -1 <dir> | xargs -n1 -i%f echo 'put %f'
1
jcollado

cela fonctionnera également de manière récursive si vous avez des sous-répertoires et des fichiers à l'intérieur:

find . -type f|awk -F"/" '{print "put ",$NF}'
0
Vijay