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.