Mein Ziel ist es, einen Pfad an meinen Dateinamen anzuhängen. Ich kann über einen Ordner iterieren und den Dateinamen erhalten, wenn ich den Pfad nicht angehängt habe. Meine Herausforderung ist, wenn ich den Pfad echo fileName hinzufügen mein regulärer Ausdruck funktioniert nicht mehr und ich bekomme "/home/erikrasmussen/Desktop/Script/realLargeMetaBatBinscontigs.fa.metabat-bins-*" wo der reguläre Ausdruck '*' wie a behandelt wird Zeichenfolge. Wie kann ich den Pfad und den vollständigen Dateinamen erhalten, während ich über einen Ordner mit Dateien iteriere?Iterieren über das Verzeichnis mit dem angegebenen Pfad in Bash
Antwort
Obwohl ich nicht wirklich wissen, wie Sie Ihre Dateien auf Ihrer Festplatte angeordnet sind, deutet darauf hin, ein flüchtiger Blick auf "/home/erikrasmussen/Desktop/Script/realLargeMetaBatBinscontigs.fa.metabat-bins-*"
, dass es ein / vor contigs
fehlt. Wenn das der Fall ist, dann sollten Sie Ihre Definition von Bins ändern: Allerdings
bins="${pathToBins}/contigs.fa.metabat-bins-*"
, es ist viel robuster bash-Arrays, anstatt sich auf Dateinamen verwenden, um keine Leerzeichen und Meta-Zeichen enthalten. So würde ich vorschlagen:
bins=(${pathToBins}/contigs.fa.metabat-bins-*)
for fileName in "${bins[@]}"
do
echo "$fileName"
done
Bash normalerweise kein Muster erweitern, die keine Datei übereinstimmt, so dass in diesem Fall, dass Sie das ursprüngliche Muster sehen. Wenn Sie die Array-Formulierung oben verwenden, können Sie die Bash-Option nullglob
setzen, wodurch das nicht angepasste Muster stattdessen verschwindet und ein leeres Array zurückbleibt.
- 1. Graf und Zufallsbild aus dem angegebenen Verzeichnis
- 2. bash: das Verzeichnis Argument
- 3. How-To Root-Verzeichnis des angegebenen Pfades in bash?
- 4. Iterieren über Arrays mit dem Schnurrbart
- 5. Bash: Skripte unter dem gleichen Verzeichnis
- 6. Iterieren über Verzeichnis und Ersetzen von '+' von einem Dateinamen zu '_' in Bash
- 7. Iterieren über ein Verzeichnis von Dateien mit GNU Make
- 8. aufrufen/mit dem angegebenen Attribut
- 9. Aufruf Shell-Skript über Bash mit einem Pfad als Argument
- 10. Iterieren durch ein Verzeichnis mit Ant
- 11. bash ~ for Schleife über bestimmte Dateien in einem Verzeichnis
- 12. das mit dem angegebenen Ascii-Code in R
- 13. Erzeugungscode zu korrigieren Verzeichnis auf dem angegebenen Paket
- 14. Bash-Skript iterieren über PIDs und kill items
- 15. Bash: Iterieren über Mitglieder eines JSON-Array ausgewählt durch Index
- 16. Die process.cwd() als Bash-Pfad in das Verzeichnis anstelle des Befehls cmd zurückgeben?
- 17. Fehler: "Das Element mit dem angegebenen Namen wurde nicht gefunden."
- 18. iterieren über ein Objekt, das von _.groupBy
- 19. Liste rekursiv alle Dateien und Ordner unter dem angegebenen Pfad?
- 20. Iterieren über Klasseneigenschaften mit LINQ
- 21. ASP wählen zufällige Datei aus dem Verzeichnis mit Server-Pfad
- 22. Wie erstellt man eine dynamische Datenbank im Entity-Framework mit dem angegebenen Pfad?
- 23. Iterieren über Elementattribute mit jQuery
- 24. Zugriff auf das Root-Verzeichnis in Windows Bash
- 25. Wie bekomme ich Dateien über dem Server-Verzeichnis in Node.js
- 26. Iterieren über Objekte in Pyquery
- 27. Filestream - „Das Format der angegebenen Pfad wird nicht unterstützt“
- 28. PySpark - Das System kann den angegebenen Pfad nicht finden
- 29. C# - Process.StartInfo.Arguments - Pfad mit Verzeichnis mit Leerzeichen
- 30. iterieren über Fallklasse Datenelemente
Jeder Vorteil der Array-Notation gegenüber: 'für Dateiname in" $ {pathToBins} "/ contigs.fa.metabat-bins- *; echo "$ fileName"; fertig? Wenn das Array später benötigt wird, ist es einfacher, es einmal zu speichern. Wenn die Informationen jedoch einmal verwendet werden, müssen sie nicht unbedingt im Array gespeichert werden. (Ich stimme zu, dass Arrays häufiger verwendet werden sollten als sie sind.) –
@JonathanLeffler: Ich stimme zu, wenn 'Bins' nicht wiederverwendet werden, hat es keinen Sinn, es zu erstellen. Ich habe gerade versucht, eine Parallele zum OP zu halten, in der "Bins" absichtlich erzeugt werden, aber als String und nicht als Array. Ich habe (vielleicht fälschlicherweise) angenommen, dass die Frage ein Snippet ist und dass "Bins" mehr als einmal im endgültigen Skript verwendet werden. – rici