Comment capturer la sortie de la commande ls ou trouver la commande pour stocker tous les noms de fichiers dans un tableau?

StackOverflow https://stackoverflow.com/questions/4678418

Question

Nécessité de traiter des fichiers dans un répertoire en cours à la fois. Je cherche un moyen de prendre la sortie de ls ou find et stocker la valeur résultante comme éléments d'un tableau. De cette façon, je peux manipuler les éléments du tableau selon les besoins.

Était-ce utile?

La solution

Pour répondre à votre question exacte, utilisez ce qui suit:

arr=( $(find /path/to/toplevel/dir -type f) )

Exemple

$ find . -type f
./test1.txt
./test2.txt
./test3.txt
$ arr=( $(find . -type f) )
$ echo ${#arr[@]}
3
$ echo ${arr[@]}
./test1.txt ./test2.txt ./test3.txt
$ echo ${arr[0]}
./test1.txt

Cependant, si vous voulez juste des fichiers de traiter une à la fois, vous pouvez l'option find de soit utiliser -exec si le script est assez simple, ou vous pouvez faire une boucle sur ce que trouver des retours comme ceci:

while IFS= read -r -d $'\0' file; do
  # stuff with "$file" here
done < <(find /path/to/toplevel/dir -type f -print0)

Autres conseils

for i in `ls`; do echo $i; done;

ne peut pas obtenir plus simple que cela!

modifier: hmm - selon le commentaire de Dennis Williamson, il semble que vous pouvez

modifier 2: bien que l'OP demande spécifiquement comment analyser la sortie de ls, je voulais juste faire remarquer que, comme les commentateurs ci-dessous ont dit, la bonne réponse est « vous n'avez pas ». Utilisez for i in * ou similaire à la place.

En fait, vous n'avez pas besoin d'utiliser ls / trouver des fichiers dans le répertoire courant.

Il suffit d'utiliser une boucle:

for files in *; do 
    if [ -f "$files" ]; then
        # do something
    fi
done

Et si vous voulez traiter les fichiers cachés aussi, vous pouvez définir l'option relative:

shopt -s dotglob

Cette dernière commande ne fonctionne que dans bash.

En fonction de ce que vous voulez faire, vous pouvez utiliser xargs:

ls directory | xargs cp -v dir2

Par exemple. xargs agir sur chaque article retourné.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top