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

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

Commande ls -a listez tous les fichiers, y compris les fichiers cachés, mais j'ai juste besoin de lister les fichiers cachés.

Quelle commande dois-je utiliser?

Commande :

ls -ld .?* 

Répertorie uniquement les fichiers cachés .

Expliquer :

 -l     use a long listing format -d, --directory              list  directory entries instead of contents, and do not derefer‐              ence symbolic links.?* will only state hidden files 
ls -d .!(|.)

Fait exactement ce que OP recherche .

ls -ad .*

fonctionne pour moi dans Bash.

Si vous voulez juste les fichiers dans votre répertoire actuel (pas de récursion), vous pouvez le faire

echo .[^.]*

Cela affichera les noms de tous les fichiers dont le nom commence par un . et est suivi d'un ou plusieurs caractères non-points. Notez que cela échouera pour les fichiers dont le nom commence par des points consécutifs, par exemple ....foo ne sera pas affiché.

Vous pouvez également utiliser find:

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

Le -mindepth s'assure que nous ne correspondons pas . et le -prune cela signifie que find ne descendra pas dans les sous-répertoires.

Utiliser find et awk,

find . -type f | awk -F"/" '$NF ~ /^\..*$/ {print $NF}'

Explication:

find . -type f> -- Liste tous les fichiers dans le répertoire courant avec son chemin comme,

./foo.html./bar.html./.foo1

awk -F"/" '$NF ~ /^\..*$/ {print $NF}'

/ en tant que séparateur de champ, awk vérifie si le dernier champ est regardé avec un point ou non. S'il commence par un point, il imprime le dernier champ de cette ligne correspondante.

find est généralement une meilleure option pour les recherches compliquées que d'utiliser la globalisation des noms.

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

ou

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

find . recherches dans l'annuaire actuel

-mindepth 1 exclure . et .. de la liste

-maxdepth 1 limite la recherche au répertoire courant

-name '.*' rechercher les noms de fichiers commençant par un point

-o ou

-name '*~' recherchez les noms de fichiers qui se terminent par un tilde (généralement, ce sont des fichiers de sauvegarde provenant de programmes d'édition de texte)

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

if [[ -f .hidden]] # if '.hidden' exists and is a filethen    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 filefi

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

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

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

grep "^\." la commande que j'ai ajoutée, qui filtre la sortie pour afficher uniquement les fichiers cachés(son nom commence par ".").

grep -v "^\.$" | grep -v "^\..$" commande que j'ai ajoutée, qui filtre la sortie à exclure ., ..(Ce sont le répertoire actuel et le répertoire parent).

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

Je suggère donc de suivre la commande pour résoudre le problème.

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

Qu'est-ce que tu aurais pu faire d'autre, is ls .?* Ou ls .!(|) cela vous montrera tout dans le répertoire actuel des fichiers/répertoires cachés en haut et d'autres fichiers / répertoires en dessous

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                              rhythmboxdconf                                       shotwell

Remarquez maintenant 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.csvbackups             Firefox_wallpaper.png        PycharmProjects          top-1m.csv.zipDesktop             java_error_in_PYCHARM_17581.log  Shotwell Import Log.txt  topsites.txtDocuments           Music                Templates            VideosDownloads           Pictures                 texput.log           vmware

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

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

Expliquer: Je veux exclure . et .. mais incluez un fichier tel que ..i_am_also_a_hidden_file.txt

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

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

Personnellement, j'aime mieux cette façon de faire

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

Un simple ’ ls-ld .* ‘ou’ ls-ald .* 'fonctionnera