Shell Globbing -> **/* vs. */*

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
bumer
Beiträge: 221
Registriert: 02.07.2014 12:29:15

Shell Globbing -> **/* vs. */*

Beitrag von bumer » 08.01.2017 11:01:26

Hallo,

wo ist der Unterschied zwischen

Code: Alles auswählen

ls -la **/*
und

Code: Alles auswählen

ls -la */*
Also ich sehe keinen, 'diff' auch nicht. Wozu wird das Konstrukt mit den beiden ** genutzt? Generell ist mir klar, dass ich mit */*/* den Ordnerinhalt aller Ordner, die sich 3 Ebenen weiter unten befinden, listen kann, nur was hat es mit der Anzahl der Anzahl der Asterisks auf sich (denn ich könnte auch schreiben **/**/****)?

Viele Grüße,
bumer

Benutzeravatar
4A4B
Beiträge: 909
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: Shell Globbing -> **/* vs. */*

Beitrag von 4A4B » 08.01.2017 11:31:16

Der Manpage von bash 4.4 zufolge kann man mit ** wohl auch ohne die "/" dazwischen rekursiv Unterverzeichnisse anzeigen lassen:
* Matches any string, including the null string. When the globstar shell option is enabled, and * is used in a pathname expansion context, two adjacent *s used as a
single pattern will match all files and zero or more directories and subdirectories. If followed by a /, two adjacent *s will match only directories and subdirec‐
tories.
globstar
If set, the pattern ** used in a pathname expansion context will match all files and zero or more directories and subdirectories. If the pattern is followed by a
/, only directories and subdirectories match.
... also vorausgesetzt, die Shell-Option globstar ist aktiviert:

Code: Alles auswählen

shopt -s globstar

Benutzeravatar
Meillo
Moderator
Beiträge: 4608
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Shell Globbing -> **/* vs. */*

Beitrag von Meillo » 08.01.2017 13:07:48

bumer hat geschrieben: Also ich sehe keinen, 'diff' auch nicht.
Dann probier's mal in einem Verzeichnisbaum, der nicht nur eine Ebene tief geschachtelt ist, und du wirst einen Unterschied sehen und `diff' auch. ;-)

Ansonsten hat 4A4B schon alles Wichtige geschrieben, u.a. auch, dass du bei `**/*' das `/*' weglassen kannst.
Use ed(1) once in a while!

Antworten