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?
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.
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 {}" \;
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
.
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
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'
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}'