Afficher uniquement les fichiers cachés (fichiers point) dans l'alias ls

43

J'utilise la commande

ls -a | grep '^\.'

pour afficher uniquement les fichiers cachés. J'ai ajouté la ligne

alias hidden='ls -a | grep '^\.'' # show only hidden files

au .bash_aliasesfichier

mais ça ne marche pas. C'est probablement le problème avec le 'caractère.

Pourriez-vous s'il vous plaît m'aider à écrire le bon alias?

Xralf
la source
avec des exemples encore plus complexes, vous devez très rarement passer de guillemets simples à doubles guillemets. Cela peut être fait simplement en écrasant les guillemets les uns contre les autres. Pour cet exemple, il serait 'ls -a | grep '"'"'^\.'"'"'affreux (et pour cet exemple, il est totalement inutile, car vous pouvez simplement échanger des guillemets contre l'une ou l'autre des paires), mais il est utile dans de très rares cas. Vous voudrez peut-être aussi un -Cindicateur (force la sortie multi-colonne). Voir cette image imgur.com/a/VIVFP
Dylan

Réponses:

27

Soit faites les guillemets doubles entre les guillemets intérieurs:

alias hidden='ls -a | grep "^\."'

Ou faites des guillemets doubles dans la paire extérieure de citations:

alias hidden="ls -a | grep '^\.'"

Ou faites toutes les guillemets doubles guillemets et échappez à la paire intérieure:

alias hidden="ls -a | grep \"^\.\""

Ou en faire une fonction, vous pouvez donc passer des arguments lorsque vous appelez:

hidden() { ls -a "$@" | grep '^\.'; }
homme au travail
la source
90

Demandez au shell de lister les fichiers de points et de lsne pas voir à travers les répertoires:

ls -d .*
Gilles, arrête de faire le mal
la source
6
Cela présente l'avantage de permettre une liste multi-colonnes, contrairement à l' grepapproche basée sur.
Anol
Cependant, montre également des répertoires (comme mentionné). Tout moyen de rester simple tel quel et de ne montrer que les fichiers?
honzajde
@honzajde La question ne demandait pas d'exclure des répertoires. Si vous voulez exclure des répertoires, vous pouvez utiliser ls -d .* | grep -v '^d'ou (zsh seulement)print -lr .*(.)
Gilles 'SO arrête d'être méchant'
cela ne marche pas pour moi, sur Ubuntu 16.04
Andrew_1510
9
ls -Ad .* #This will list all the hidden files & directories while retaining the color & formatting

OU

Pour créer un alias du même:

alias lh='ls -Ad .*'

OU

La même chose pourrait être faite via la commande grep et l’opérateur de pipe; Cependant, il perdrait la couleur et le formatage:

ls -a|grep "^\." 

OU

Via alias:

alias lh='ls -a|grep "^\."'
Prince Bhanwra
la source
4

Vous pouvez utiliser des guillemets doubles:

alias hidden="ls -a | grep '^\.'"

ou concaténer plusieurs chaînes entre guillemets simples

alias hidden='ls -a | grep '\''^\.'\'

ou supprimer à tous les devis internes

alias hidden='ls -a | grep ^\\.'
enzotib
la source
2

Pour le compte rendu, cela ne semble pas fonctionner avec moi, car il en ls -aimprime deux (parfois plus de colonnes). Je vous recommande d'utiliser l' -1option pour vous assurer que chaque fichier est dans sa propre ligne. Quelque chose comme ça:

alias hidden='ls -a1 | grep "^\."'
Rahmu
la source
Je viens d'essayer ls -a | catencore des sorties sur 2 colonnes. Je devrais mentionner que j'utilise Solaris et non les GNU ls. Peut-être que c'est pour ça. Dans tous les cas, votre -1solution a parfaitement fonctionné et est beaucoup plus élégante que ma solution de rechange hackish. Je met à jour ma réponse.
Rahmu
J'ai probablement manqué cette discussion, mais regardez ici si quelque chose va mal se passer.
xralf
1

Ce qui rend un peu plus compliqué, mais en évitant d' analyserls .

llsh () { find "${@:-.}/" -maxdepth 1 -type f -name ".*" -ls; }

lsh () { find "${@:-.}/" -maxdepth 1 -type f -name ".*" -print; }

Les deux fonctions du shell vont findgénérer une liste de tous les fichiers cachés dans le répertoire courant ou dans le répertoire indiqué sur la ligne de commande.

La llshfonction générera une "longue liste" qui ne sera que légèrement plus détaillée que celle générée ls -l, alors que lshgénérera une liste à une colonne semblable à ls -1.

Kusalananda
la source
0
find . -type f -name ".*"

OU

find . -type f -name ".*" | while read file; do basename $file; done
Kemiko
la source
Salut! Vous pourriez améliorer votre réponse en expliquant en détail son fonctionnement et en expliquant pourquoi, à votre avis, cela répond à la question.
Dhag
0
# add it to ~/.bashrc

    hidden() {  # lists hidden files and directories
        find . -maxdepth 1 -name '.?*' -exec ls --color -d {} \;
        }

    hiddenfiles() { # lists hidden files
        find . -maxdepth 1 -type f -name '.?*' -exec ls --color -d {} \;
        }

    hiddendirs() { # lists directories
        find . -maxdepth 1 -type d -name '.?*' -exec ls --color -d {} \;
        }
Akhil J
la source
-1

Est-ce que votre lssoutien -A? De man ls:

    -a, --all
          do not ignore entries starting with .

   -A, --almost-all
          do not list implied . and ..

$ ls --version
ls (GNU coreutils) 8.5
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  
Written by Richard M. Stallman and David MacKenzie.
Waltinator
la source
Oui, mais je voulais onlydes fichiers cachés.
xralf
ls -A -1 -d -F .* | egrep -v '/$'
Waltinator
-3

Il suffit simplement de taper la commande ci-dessous et de ne pas confondre avec les éléments expliqués ci-dessus.

ls -A -1 -d -F .* | egrep -v '/$'
Srinath
la source
Je pense que le PO a demandé comment écrire un alias correctement.
contre-mode
1
Ce n'est qu'une copie du commentaire de Waltinator sur sa réponse. Pour que cette réponse soit utile, vous devez expliquer comment et pourquoi ces lsindicateurs et la egrepcommande répondent à la question.
Anthony G - justice pour Monica le
-3
ls -lart | sed -n "/ \.[A-Za-z0-9][A-Za-z0-9]*/p"
Shailesh Chanderiya
la source
2
Pouvez-vous préciser votre réponse, une ligne de code n'est pas considérée comme une bonne réponse
Romeo Ninov
selon les besoins, il doit répertorier uniquement les fichiers cachés. donc j'ai la liste de tous les fichiers, y compris les fichiers cachés par ls -art. Ensuite, j'ai utilisé regex pour montrer que les fichiers qui commencent par un point (.). Je suis sortie comme ça.
Shailesh Chanderiya
[g906016 @ hklu2574881: [PTA] ~] $ ls -lart | sed -n "/ \. [A-Za-z0-9] [A-Za-z0-9] * / p" -rw-r - r-- 1 g906016 g906016 658 29 décembre 2016 .zshrc -rw- r - r-- 1 g906016 g906016 171 29 décembre 2016 .kshrc -rw ------- 1 g906016 g906016 27 décembre 29 2016 .k5login -rw-r - r-- 1 g906016 g906016 176 29 décembre 2016. bash_profile -rw-r - r-- 1 g906016 g906016 18 déc 29 2016 .bash_logout -rwxr-xr-x 1 g906016 g906016 0 déc 29 2016 .dir_colors drwxr-x --- 3 g906016 g906016 g906016 4096 déc 29 2016 .subversion
shailesh Chanderiya