Referenzieren von Elementen in der Bash-For-Schleife aus dem Find-Befehl

Referenzieren von Elementen in der Bash-For-Schleife aus dem Find-Befehl

Angenommen, ich habe diesen Code:

for i in $(find * -type f -name "*.txt"); do 
  # echo [element by it's index]
done

Wie greife ich, falls möglich, auf ein Element über seinen Index zu?

Antwort1

Ihr Befehl

$(find * -type f -name "*.txt")

gibt eine (durch Leerzeichen getrennte) Bash-Liste zurück, kein Array, daher können Sie nicht wirklich „gezielt“ auf die einzelnen Elemente zugreifen.

Um es in ein Bash-Array zu konvertieren, verwenden Sie

filearray=( $(find * -type f -name "*.txt") )

(Beachten Sie die Leerzeichen!)

Anschließend können Sie die einzelnen Einträge aufrufen wie in

for ((i=0; i<n; i++))
do
   file="${filarray[$i]}"
   <whatever operation on the file>
done

Die Anzahl der Einträge kann abgefragt werden über

n="${#filearray[@]}"

Beachten Sie jedochdass diesenurfunktioniert, wenn Ihre Dateinamen keine Sonderzeichen (insbesondere Leerzeichen) enthalten und daher noch einmal,Das Parsen der Ausgabe von lsoder findwird nicht empfohlen. In Ihrem Fall würde ich empfehlen, zu prüfen, ob die -execOption das findleistet, was Sie erreichen möchten.

verwandte Informationen