Wie erstellt man eine Datei in allen Unterverzeichnissen?

291
Maxim Zubarev

Ich habe viele Unterverzeichnisse, wie:

/path/to/my/subs/a /path/to/my/subs/b /path/to/my/subs/c 

Nein, ich möchte in jedem eine neue Datei erstellen. Der Dateiname ist konstant wie:

/path/to/my/subs/a/foo.md /path/to/my/subs/b/foo.md /path/to/my/subs/c/foo.md 

Wie mache ich das? Ich hoffte touch /path/to/my/subs/*/foo.mdes zu tun, aber es sagtetouch: /path/to/my/subs/*/foo.md: No such file or directory

1

2 Antworten auf die Frage

0
fd0

Wenn Sie davon ausgehen, dass Sie diese bashals Shell verwenden, verwenden Sie eine Klammererweiterung.

touch /path/to/my/subs//foo.md 
0
LSerni

Sie können das findDienstprogramm verwenden:

find /path/to/my/subs -type d -links 2 -exec touch "{}/foo.md" \; 

Dies wird den gesamten Baum durchlaufen, beginnend bei Subs, das Auffinden von Blattverzeichnissen (Terminal) und das Berühren einer foo md-Datei.

Sie können auch den Teil "-exec" ... weglassen und verwenden xargs, um die Dateien am Ende zusammen zu erstellen, weniger touchBinärdateien zu erzeugen oder eine einzelne Berührung zu verwenden:

touch $( find /path/to/my/subs -type d -links 2 | sed -e 's#$#/foo.md#g' ) 

Der findTeil erhält die Verzeichnisse und sedwandelt sie in die entsprechenden Dateinamen um.

Wenn Sie über eine einzige Verzeichnisebene verfügen:

für dir in / path / to / my / subs / *; Berühren Sie $ dir / foo.md. erledigt