Wenn Sie davon ausgehen, dass Sie diese bash
als Shell verwenden, verwenden Sie eine Klammererweiterung.
touch /path/to/my/subs//foo.md
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.md
es zu tun, aber es sagtetouch: /path/to/my/subs/*/foo.md: No such file or directory
Wenn Sie davon ausgehen, dass Sie diese bash
als Shell verwenden, verwenden Sie eine Klammererweiterung.
touch /path/to/my/subs//foo.md
Sie können das find
Dienstprogramm 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 touch
Binä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 find
Teil erhält die Verzeichnisse und sed
wandelt 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