Am saubersten mit find. Damit kannst du auf Ordner filtern (egal ob rekursiv oder nur z.B. in der ersten Ebene) und in diesen Befehle ausführen.
Folgende Beispielstruktur:
asdf
- one
- two
qwer
Um rekursiv durch alle Verzeichnisse zu gehen und 2 Kommandos auszugeben also z.B.
$ find . -type d -exec echo Foo {} \; -exec echo Bar {} \;
Foo .
Bar .
Foo ./asdf
Bar ./asdf
Foo ./asdf/one
Bar ./asdf/one
Foo ./asdf/two
Bar ./asdf/two
Foo ./qwer
Bar ./qwer
Wie du siehst sind hier alle Verzeichnisse (Auch das Startverzeichnis .) mit drin.
Willst du nur in den direkten Unterordner etwas machen musst du bei diesen beginnen (das *) und die Maximale Suchtiefe auf 0 setzen.
$ find ./* -maxdepth 0 -type d -exec echo Foo {} \; -exec echo Bar {} \;
Foo ./asdf
Bar ./asdf
Foo ./qwer
Bar ./qwer
Hinweis: Nur den Namen ausgeben kann man besser mit der Option -print (Standard wenn nichts anderes gesagt wird, also z.B. benutzt bei find . -type d
), das doppelte echo foo {}
dient hier nur der Verdeutlichung.