227 votes

Comment afficher uniquement les fichiers cachés dans le Terminal ?

J'ai un répertoire qui contient des milliers de fichiers, dont certains sont cachés.

La commande ls -a lister tous les fichiers, y compris les fichiers cachés, mais je n'ai besoin que de lister les fichiers cachés.

Quelle commande dois-je utiliser ?

4voto

user815423426 Points 9267

find est généralement une meilleure option pour les recherches complexes que l'utilisation du nom global.

find . -mindepth 1 -maxdepth 1 -name '.*'

o

find . -mindepth 1 -maxdepth 1 -name '.*' -o -name '*~'

find . recherche dans le répertoire actuel

-mindepth 1 exclut . et .. de la liste

-maxdepth 1 limite la recherche au répertoire courant

-name '.*' trouver les noms de fichiers qui commencent par un point

-o o

-name '*~' trouver les noms de fichiers qui se terminent par un tilde (généralement, il s'agit de fichiers de sauvegarde provenant de programmes d'édition de texte)

Cependant, cette réponse et toutes les autres réponses manquent les fichiers qui se trouvent dans le répertoire courant de l'utilisateur. .hidden fichier. Si vous écrivez un script, alors ces lignes liront le fichier .hidden et afficher les noms des fichiers qui existent.

if [[ -f .hidden]] # if '.hidden' exists and is a file
then
    while read filename # read file name from line
    do
        if [[ -e "$filename" ]] # if the read file name exists
        then
            echo "$filename" # print it
        fi
    done < .hidden # read from .hidden file
fi

2voto

xiaodongjie Points 2696

Je pense que vous pouvez le faire avec la commande suivante.

ls -a | grep "^\." | grep -v "^\.$" | grep -v "^\..$"

ls -a que vous avez saisie, qui affiche tous les fichiers et répertoires du répertoire de travail actuel.

grep "^\." que j'ai jointe, qui filtre la sortie pour ne montrer que les fichiers cachés (son nom commence avec "." ).

grep -v "^\.$" | grep -v "^\..$" que j'ai ajouté, qui filtre la sortie pour exclure ., .. (Ils sont le répertoire courant et le répertoire parent).

Si certains noms de fichiers peuvent avoir plus d'une ligne avec le symbole "\n" L'exemple ci-dessus pourrait être incorrect.

Je suggère donc la commande suivante pour résoudre ce problème.

find -maxdepth 1 -name ".[!.]*"

2voto

Stefan Points 348

Ce que vous auriez pu faire d'autre, is ls .?* Ou ls .!(|) qui vous montrera tout ce qui se trouve dans le répertoire actuel : les fichiers/dossiers cachés en haut et les autres fichiers/dossiers en bas.

Par exemple : depuis mon terminal

$ ls .?*       
.bash_history    .dmrc        .macromedia   .weather
.bash_logout     .gksu.lock   .profile      .wgetrc
.bash_profile    .bashrc.save .ICEauthority .toprc           .Xauthority
.bashrc          .lastdir     .viminfo      .xsession-errors
.bashrc~         .dircolors   .lynxrc       .vimrc           .xsession-errors.old

..:
Baron

.adobe:
Flash_Player

.aptitude:
cache  config

.cache:
compizconfig-1                              rhythmbox
dconf                                       shotwell

Maintenant, remarquez dans les résultats ci-dessus, il vous montre chaque fichier/répertoire avec son sous-répertoire et tous les fichiers cachés juste en dessous.

[1:0:248][ebaron@37signals:pts/4][~/Desktop]
$ ls .!(|)
.bash_aliases  .bashrc1  .bashrc1~

..:
askapache-bash-profile.txt  examples.desktop             Public           top-1m.csv
backups             Firefox_wallpaper.png        PycharmProjects          top-1m.csv.zip
Desktop             java_error_in_PYCHARM_17581.log  Shotwell Import Log.txt  topsites.txt
Documents           Music                Templates            Videos
Downloads           Pictures                 texput.log           vmware

Désolé, je ne peux pas commenter. pour expliquer la différence ici entre ls .?* et la réponse de @cioby23 ls -d .[!.]* .??* Et la raison pour laquelle il imprime deux fois les fichiers cachés est que vous demandez deux fois. .??* , .?* , .[!.]* c'est la même chose, donc ajouter l'un d'entre eux avec des caractères de commande différents s'imprimera deux fois.

2voto

Lu Tran Points 121

*Approche 1 : `ls -d .{[!.],.?}`**

Expliquez-moi : Je veux exclure . y .. mais inclure un fichier tel que ..i_am_also_a_hidden_file.txt

  1. ls -d .* montre de manière indésirable . y ..
  2. ls -d .?* (la réponse actuellement acceptée) montre de manière indésirable ..
  3. ls -d .[!.]* de manière indésirable ne se montrera pas ..i_am_also_a_hidden_file.txt
  4. ls -d .{[!.],.?}* est la réponse

Approche 2 : ls -A | grep "\\."

Personnellement, j'aime mieux ça.

1voto

cioby23 Points 2475

Vous pouvez également utiliser :

ls -d .[!.]* .??*

Cela vous permettra d'afficher les fichiers cachés normaux et les fichiers cachés qui commencent par 2 ou 3 points, par exemple : ..hidden_file

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X