Je sais que je peux le faire pour obtenir une liste de noms de répertoire:
find . -type d -maxdepth 1
La sortie ressemble à ceci:
.
./foo
./bar
Je préfère la liste sans ./
. Existe-t-il un moyen d'obtenir que find ne produise que les noms bruts?
J'ai essayé d'envoyer la liste à stat pour la formater mais cela me donne juste le même résultat:
find . -type d -maxdepth 1 -print0 | xargs -0 stat -f '%N'
Avec GNU find
vous pouvez utiliser le -printf
option:
find . -maxdepth 1 -type d -printf '%f\n'
Comme indiqué par Paweł dans les commentaires, si vous ne voulez pas que le répertoire actuel soit répertorié, ajoutez -mindepth 1
, par exemple.:
find . -mindepth 1 -maxdepth 1 -type d -printf '%f\n'
Mise à jour:
Une alternative plus courte:
find . -maxdepth 1 -type d | cut -c 3-
Vous donnera les noms, un par ligne, sans aucune barre oblique
En utilisant GNU find, vous pouvez utiliser -mindepth pour empêcher find de correspondre au répertoire courant:
find . -type d -maxdepth 1 -mindepth 1
Comme vous ne le faites pas récursivement, vous pouvez utiliser un glob bash:
echo */
L'ajout d'un signe de fin/à un glob entraînera uniquement la correspondance des répertoires.
Je préfère utiliser:
find ./ -type d -maxdepth 1 -exec basename {} \;
Laissez sed
supprimer ces deux caractères:
find . -maxdepth 1 -type d | sed -e 's/^\.\///'
J'utilise habituellement:
find * -type d
Mais je ne sais pas si c'est la bonne façon de faire ce que tu veux.
Sous AIX, le paramètre 'maxdepth' ne fonctionne pas.
En général, cela fonctionne pour moi:
find ./ -type d | cut -d"/" -f2 | sort -u
Ce que vous recherchez s'appelle basename
, il ignore la structure du répertoire unix
Exemple ci-dessous:
find /any/path/you/want -maxdepth 1 -type d -exec basename {} \;
il exclura pour la sortie même le chemin dir, supprimant la nécessité de cd
avant d'exécuter la commande
Quelques informations supplémentaires:
Je passerais -exec
comme argument pour trouver à la place |
(pipe) une autre commande pour la sortie (en évitant que la deuxième commande passe sur chaque ligne de sortie, cela dit que, selon la sortie, cela pourrait améliorer les performances du script)
REMARQUE: find
les options sont pas positionnelles (-maxdepth affecte les tests spécifiés avant lui ainsi que ceux spécifiés après).