it-swarm-eu.dev

Získejte seznam názvů adresářů s hledáním

Vím, že to mohu udělat, abych získal seznam jmen adresářů:

find . -type d -maxdepth 1 

Výstup vypadá takto:

.
./foo
./bar

Upřednostňuji zápis bez ./. Existuje způsob, jak najít výstup pro výstup pouze surových jmen?

Snažil jsem se poslat seznam do statu, abych jej naformátoval, ale to mi dává stejný výsledek:

find . -type d -maxdepth 1 -print0 | xargs -0 stat -f '%N'
40
joachim

Pomocí GNU find můžete použít -printf možnost:

find . -maxdepth 1 -type d -printf '%f\n'

Jak poznamenal Paweł v komentářích, pokud nechcete, aby byl aktuální adresář uveden, přidejte -mindepth 1, např .:

find . -mindepth 1 -maxdepth 1 -type d -printf '%f\n'
44
Thor

Aktualizace:

Kratší alternativa:

 find . -maxdepth 1 -type d | cut -c 3-

Dá vám jména, jedno na řádek, bez lomítek

18
Levon

Pomocí GNU find) můžete použít -mindepth, abyste zabránili hledání ve shodě s aktuálním adresářem:

find . -type d -maxdepth 1 -mindepth 1

Protože to neděláte rekurzivně, můžete použít bash glob:

echo */

Přidání koncové/ku globálu způsobí, že budou přiřazeny pouze adresáře.

9
jordanm

Raději bych použil:

 find ./ -type d -maxdepth 1 -exec basename {} \;
6
user1293137

Nechte sed odstranit tyto dva znaky:

find . -maxdepth 1 -type d | sed -e 's/^\.\///'
6
Birei

Obvykle používám:

find * -type d

Ale nevím, jestli je to správný způsob, jak dělat to, co chcete.

2
Francesco Turco

V systému AIX nefunguje parametr „maxdepth“.

Obecně to funguje pro mě:

find ./ -type d | cut -d"/" -f2 | sort -u

0
user1656294

To, co hledáte, se nazývá basename, ignoruje unixovou strukturu adresářů

Příklad níže:

find /any/path/you/want -maxdepth 1 -type d -exec basename {} \;

vyloučí pro výstup i adresářovou cestu, což odstraní nutnost cd před spuštěním příkazu


Několik dalších informací:

Prošel bych -exec jako argument, který místo toho najde | (pipe) další příkaz pro výstup (vyhnutí se druhému příkazu přes každý výstupní řádek, ale řekl, že v závislosti na výstupu může zlepšit výkon skriptu)

POZNÁMKA: Možnosti find jsou nikoli poziční (-maxdepth ovlivňuje testy zadané před ním, jakož i testy zadané po něm).

0
gonzalesraul