ls tout ce qui n'est pas un lien symbolique

12

A-t ls-il un moyen de montrer des conditions négatives comme "tous les fichiers qui ne sont pas un lien symbolique"? J'utilise beaucoup ce dernier dans un répertoire de projet mais d'autres négations seraient également utiles.

Pour l'instant, mes recherches n'ont conduit qu'à créer un alias vers quelque chose de "like":

find . -maxdepth 1 ! -type l | sort # (...)

mais évidemment de cette façon je n'obtiens pas la coloration ls, le formatage des colonnes, etc ...

Je suis parfois sur Bash v3 sur OS X 10.8.2 et Bash v4 sur Pangolin.

Robottinosino
la source

Réponses:

14

Au lieu de le canaliser sort, utilisez ls.

find . -maxdepth 1 \! -type l -exec ls -d {} +

find . -maxdepth 1 \! -type l | xargs ls -d

Si vous avez utilisé le shell zsh, vous pouvez utiliser leurs extensions glob non portables:

ls -d *(^@)
Aléatoire832
la source
Thx 4 la réponse! Pourquoi t'échappes-tu!? Il semble fonctionner même sans. Ce que je risque de ne pas y échapper? Intéressant comment vous utilisez une finale +et non \;, veuillez expliquer?
Robottinosino
2
@Robottinosino Le +fait tout envoyer à une seule lscommande au lieu de l'exécuter séparément pour chaque fichier (de cette façon, ls peut faire les colonnes et le tri). J'ai échappé au! car c'est un caractère spécial pour certains obus même si le vôtre semble bien l'accepter.
Random832
Je t'ai eu. Super truc! Êtes-vous d'accord pour dire que c'est un peu laborieux, juste pour annuler un prédicat en un simple ls? Pourrait-il y avoir une meilleure façon?
Robottinosino du
1
@Robottinosino Modifié avec quelque chose que zsh peut faire. Je ne pense pas que bash puisse le faire.
Random832