Ich muss alle Dateien in einem Verzeichnis zu einer Datei verketten, aber Dateien mit angegebenen Namen müssen oben auf der Ausgabe sein. Nur cat * > result
wird alle Dateien in alphabetischer Reihenfolge verketten. Gibt es eine Möglichkeit, Katze zu sagen, um die Datei vars.css
oder eine andere am Anfang der Ausgabe zu platzieren? Für jetzt habe ich nur Dateien umbenannt müssen zuerst 000-filename
sein, aber ich frage mich, ob es bessere Lösung ohne Umbenennen von Dateien gibt.Cat * und Reihenfolge der Dateien
Antwort
Es gibt viele Wege, dies zu erreichen, von denen die meisten ein anderes Programm aufrufen würden, um die Liste der Dateien zu erzeugen (in der bevorzugten Reihenfolge).
Eine Möglichkeit, es mit nur bash (und unter der Annahme einer geringen Anzahl von Dateien, die Sie manuell nach vorne verschieben möchten) zu erreichen wäre:
auf die(GLOBIGNORE=vars.css && cat vars.css *)
Wenn Sie mehrere Dateien zu bringen
(GLOBIGNORE=vars.css:other.file && cat vars.css other.file *)
die variable bash-Dateien, die Muster passend zu ignorieren sagt GLOBIGNORE Umgebung, während ein glo erweitert: vor der Liste können sie in GLOBIGNORE aufgenommen werden b (wie *
). Weitere Informationen finden Sie unter bash manual.
Es ist wichtig sicherzustellen, dass GLOBIGNORE nicht versehentlich für den Rest der Shell gesetzt ist (Danke an Tim, dass er darauf hinweist). Sie können das auf verschiedene Arten erreichen, wie ich es oben getan habe, indem Sie die ganze Aussage in Klammern setzen. Wenn Sie es ohne Klammern ausführen, sollten Sie sicherstellen, dass Sie danach GLOBIGNORE nicht gesetzt haben: unset GLOBIGNORE
Sie müssen explizit sein, aber erweiterte Muster machen das ein wenig einfacher, wenn die Datei zuerst kommen soll.
shopt -s extglob
cat vars.css !(vars.css) > result
!(vars.css)
ist wie *
, aber passt alles außervars.css
.
Andernfalls definieren Sie ein benutzerdefiniertes Gebietsschema, in dem vars.css
an der gewünschten Position relativ zu den anderen Dateien sortiert wird. Es ist wirklich nicht etwas, für das einfaches Globbing geeignet ist.
Es gibt weitere Informationen über erweitertes Globbing in der [Bash man page] (https://www.gnu.org/software/bash/manual) /html_node/Pattern-Matching.html). Es gibt auch einen [Linux Journal Artikel] (http://www.linuxjournal.com/content/bash-extended-globbing) darüber. – Tim
Danke, diese Lösung scheint ein richtiger Weg zu sein, dies zu lösen. – VictorPrudniy
- 1. Bash: cat mehrere Dateien aus der Liste der Dateien
- 2. css-Dateien in der Reihenfolge
- 3. Verwenden von cat, um Dateien mit numerischen Namen zu kombinieren, die in der Reihenfolge
- 4. Reihenfolge der Bootstrap- und CSS-Dateien
- 5. Pipelining der Befehle cat und ls
- 6. Bash: tail, find und cat
- 7. Was ist der Unterschied zwischen `cat <file` und` cat file`?
- 8. Entspricht in git von "hg cat" oder "svn cat"
- 9. Batching & CAT Befehl
- 10. Python - Dateien durchlaufen - Reihenfolge
- 11. 2 MP4-Dateien mit dem Befehl cat verschmelzen
- 12. bash: zcat vs. cat Diskrepanz zum Verketten von .gz-Dateien
- 13. shell - cat - Zusammenführen von Dateien in eine große Datei
- 14. Lesen Sie Dateien mit CAT oder AWK für bessere Ausführungszeit
- 15. Ändern Reihenfolge der Reihenfolge Wörterbuch in Python
- 16. Bash: Unterschied zwischen $ (cat) und "$ a"
- 17. Dateien in numerischer Reihenfolge verarbeiten
- 18. Reihenfolge der Konstruktoren und Destruktoren
- 19. Reihenfolge der Multiplikation und Division
- 20. RegisterStartupScript und Reihenfolge der Ausführung
- 21. Reihenfolge der Methodenauflösung und Metaklassen
- 22. AWS Elastic Beanstalk .ebextensions Reihenfolge der Reihenfolge
- 23. Auswertung der Reihenfolge der Funktionsargumente und Standardargumente
- 24. Makefile für viele LaTeX Dateien und Abhängigkeiten in aufsteigender Reihenfolge
- 25. Python: execute cat Subprozess parallel
- 26. D3 Blöcke: Wie man die Reihenfolge der Dateien ändert
- 27. Grunt concat AngularJS-Dateien in der falschen Reihenfolge
- 28. Laden Sie mehrere Dateien in der Reihenfolge von JSON herunter
- 29. So führen Sie bestimmte Dateien in der Reihenfolge junit
- 30. (Android) CAT S40 gelbe Taste
Verwenden Sie '&&' andernfalls wird die 'GLOBIGNORE' Variable global (in dieser Shell) statt nur für diesen Befehl gesetzt. – Tim
Danke, 'GLOBIGNORE' hat perfekt funktioniert. – VictorPrudniy
Keine Notwendigkeit für Klammern, verwenden Sie einfach: 'GLOBIGNORE = vars.css cat vars.css *' oder 'GLOBIGNORE = vars.css: other.file cat vars.css other.file *' – Tim