Faire trouver une barre oblique après les répertoires?

19

Comment faire pour que la commande find affiche une barre oblique après les répertoires? Par exemple, je veux dirapparaître comme dir/au lieu de dir. j'utilisefind . -print

Steven
la source

Réponses:

10

Portablement:

find . -type d -exec sh -c 'printf "%s/\n" "$0"' {} \; -or -print

Si vous souhaitez répertorier les répertoires et les fichiers séparément (vous pouvez fusionner la sortie en triant):

{ find . -type d -print | sed 's!$!/!'; find . \! -type d; } | sort

Avec GNU find, voir la réponse de Shawn J. Goff .

Si vous êtes prêt à risquer que des caractères non imprimables soient mutilés même lorsqu'ils ne sont pas sortis sur un terminal, consultez la réponse de ddeimeke .

Dans zsh: print -rl -- **/*(DM)( Dpour inclure les fichiers dot, Mpour ajouter un /répertoire after)

Gilles 'SO- arrête d'être méchant'
la source
La première commande n'a pas imprimé de barres obliques pour moi, mais la seconde le fait.
Steven
15
find . \( -type d -printf "%p/\n" , -type f -print \)

Cela utilise la commande printf pour formater les noms de répertoire et l'impression standard pour le reste.

Shawn J. Goff
la source
Je continue d'être étonné de la flexibilité de find.
Shawn J. Goff
1
Notez que cela -printfest spécifique à GNU find.
Gilles 'SO- arrête d'être méchant'
Bonne réponse. J'aime la façon dont findles arguments positionnels lui permettent de faire une sortie avancée comme celle-ci. Cependant, notez que sans les espaces autour de la virgule, cela ne fonctionnera pas.
jimp
1
Sur la base de cette réponse et de celle de Gilles, j'ai trouvé la version simplifiée suivante:find . -type d -printf '%p/\n' -or -print
Teresa e Junior
8

Peut être

find . -print0 | xargs -0 ls -Fd

est également une option.

À partir d'une page de manuel Solaris:

-F Marque les répertoires avec une barre oblique de fin (/), les portes avec un signe supérieur à (()), les fichiers exécutables avec un astérisque de fin (*), les FIFO avec une barre verticale de fin (|), les liens symboliques avec une fin " à "signe (@), et AF_UNIX adresse les sockets de famille avec un signe égal à la fin (=). Suit les liens symboliques nommés comme opérandes.

ddeimeke
la source
@Gilles: Merci pour le "d" ;-)
ddeimeke
cela augmente le nombre d'appels système
Paweł Polewicz