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

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)


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.


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.


@Gilles: Merci pour le "d" ;-)
— ddeimeke

cela augmente le nombre d'appels système
— Paweł Polewicz
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.