mittels geschweifter Klammern mehrere dateien gleichzeitigt erstellen?

5 Antworten

Hallo

touch {a,c}.txt oder touch {a...c}

Wenn die Zahl der zu erstellenden Dateien sehr groß ist, dann kann es mit dem Kommando

for i in {1..8}; do touch $i; done

zu Problemen wegen der Inodes kommen, da wäre es dann so besser:

printf '%s ' {001..100} | xargs touch

Dabei ist die

001

der Wert mit dem

begonnen

werden sollund die

100

der höchste Wert, also die Anzahl bis

wohin

es gehen soll.

Ersetze einfach die Zahlen 001 und 100 durch eigene Werte. So kannst Du auch Millionen Dateien in einem Rutsch erstellen.

Ein anderer Weg, den ich bei stackexchange gefunden habe, wäre:

seq 10 | xargs touch

um zum Beispiel 10 Dateien aufsteigend zu erstellen.

Linuxhase

Woher ich das weiß:eigene Erfahrung – Ich benutze seit 2007 Linux und habe LPIC101 und LPIC102
maxmeer 
Fragesteller
 04.01.2017, 22:12

Bei dieser Lösung stellt sich mir die Frage (die bei der wiedergefundenen Lösung kein Problem ist): Wie hänge ich hier den gleichbleibenden Rest des Namens an? Eigentlich reicht ja eine Lösung :-) mm

0
Linuxhase  05.01.2017, 05:37
@maxmeer

@maxmeer

Eigentlich reicht ja eine Lösung :-)

Hallo?, wir sind bei GNU/Linux, da gibt es eigentlich immer viele Wege wie man eine Sache erledigen kann.

Man hat meist die Qual der Wahl welche für einen persönlich die "schönere" ist. Während ich aus alter Tradition versuche den Code so kurz wie möglich zu halten, stört es meinen Sohn nicht wenn er in einer Befehlszeile mehrere Pipes verwendet. Auch wenn es dabei meist nur um Sekundenbruchteile bzw. Codezeilen geht die dabei eingespart werden, so wächst diese Zahl aber auch exponentiell mit der Menge der zu verarbeitenden Daten.

Linuxhase

0

Hallo

mittels geschweifter Klammern mehrere dateien gleichzeitigt erstellen?

Keine Ahnung was Du mit den Klammern willst, aber mehrere Dateien erstellen ist doch einfach:

touch dat1 dat2 dat3 file1 file2 file 3 "Neue Datei 1" "Neue Datei 2" "usw."

Einst wusste ich wie mittels geschweifter Klammern mehrer Dateien mit einem Befehl erstellt wurden.

Du meinst doch nicht etwa eine Automatisierung also aufsteigend nummerierte Dateien?:

for i in $(echo 1 2 3 4 5 6 7 8; do touch ${i}; done

Linuxhase

Woher ich das weiß:eigene Erfahrung – Ich benutze seit 2007 Linux und habe LPIC101 und LPIC102
barnim  24.11.2016, 08:25

Dein letztes Beispiel ist irgendwie wat krumm (Klammer-zu fehlt u.A.).

for i in {1..8}; do touch $i; done

waere dann funktionell ;)

P.S.: {1..8} kann man entsprechend mit {a..c} ersetzen.

2
Linuxhase  24.11.2016, 10:14
@barnim

@barnim

Dein letztes Beispiel ist irgendwie wat krumm (Klammer-zu fehlt u.A.).

Ja, war wohl nicht genug konzentriert :-(

Linuxhase

1
maxmeer 
Fragesteller
 05.12.2016, 15:29
@barnim

Das war das Zauberwort, das ich vergessen hatte

0
maxmeer 
Fragesteller
 18.01.2019, 14:27
@barnim

Danke, aber jetzt wo ich wieder weiß geht es noch kürzer

touch {a..c}.txt
1

Die Antwort ist ganz einfach - wenn mensch's weiß - hab es auch wieder ausgraben müssen. Zwei Punkte zwischen den Buchstaben, Zahlen, möglicherweise auch Zeichen {A..Z} macht nur Großbuchstaben, aber {A..z} müsste ach ganz lustige Dateinamen zusammenbringen und es lassen sich ja auch beliebig viele geschweifte Klammern aneinander fügen.

touch {a..c}{l..x}.{2..6} etc viel Glück mm

warum sollte

touch {a,b}.txt 

mit der Standard-Shell von Linux (bash)  nicht funktionieren ?
Ob diese Möglichkeit mit allen Shells enthalten ist, kann ich nicht sagen.
Mit der bash, der csh, der ksh und der zsh geht es.

Welche Fehler werden bei dir gemeldet? Hast du in dem betreffenden Directory auch die nötigen Rechte?

Woher ich das weiß:Berufserfahrung – openSuSE seit 1995
maxmeer 
Fragesteller
 05.12.2016, 15:22

Linuxhase's Antwort war was ich gesucht habe. Ich hatte es vergessen das ZWEI Punkte das Zauberwort sind {a..d}

0

Einfach "touch datei1 datei2 datei3" o. ä. eingeben, ohne irgendwelche Klammerung. Dann funktioniert es.

maxmeer 
Fragesteller
 05.12.2016, 15:28

keine Frage, aber mir ging's ja die "Zauberformel" und Linuxhase hat sie gewusst: ZWEI Punkte

touch {a..c}.txt # legt a.txt, b.txt. c.txt an 
touch {a..f}{1..9}.xxx 

und das Wunder wirkt. a1.xxx bis f9.xxx sind fertig

0