afficher uniquement les fichiers commençant par. (caché)


11

J'ai essayé d'afficher uniquement les fichiers cachés mais je ne sais pas comment le faire.

Cela fonctionne (mais correspond également aux points dans d'autres endroits)

ls -la | grep '\.'

J'essayais d'ajouter, ^mais je n'ai pas trouvé la solution.


1
L'analyse lsn'est jamais une idée merveilleuse, mais ce que vous avez essayé aurait fonctionné si vous aviez utilisé l'ancre ^pour indiquer le début du match. ls -la | grep '^\.'
devnull

3
Non, le nom de fichier n'est pas le début de la ligne avec l'indicateur -l. ls -la | awk '$9 ~ /^\./'volonté.
yoonix

Réponses:



4
find . -type f -name '\.*' -print 

Doit fonctionner si vous voulez répertorier tous les fichiers cachés dans la hiérarchie des répertoires.


2

Si vous voulez analyser la lssortie, vous devez ajouter ^au début de l'expression régulière et ne pas utiliser d' -loption. L'utilisation de -lchaque sortie de ligne démarre avec les informations d'autorisation de fichier ou de dossier, et non le nom de fichier ou de dossier. Vous devez donc utiliser comme ceci:

ls -Ad | grep '^\.'

Ou vous pouvez le faire avec printfbash builtin:

printf "%s\n" .*

Si vous utilisez zsh, vous pouvez utiliser:

print -l .*

1

Voici deux autres façons de rechercher uniquement des fichiers cachés.

find . -maxdepth 1 -name ".*" -type f -ls

ou

find . -maxdepth 1 -name ".*" -type f -printf "%P \n"

Utilisez -maxdepthpour spécifier jusqu'où vous souhaitez rechercher dans l'arborescence.


1

Une amélioration de la réponse de Flup :

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

Ceci listera tous les fichiers dont le nom commence par un point et qui ne sont ni .ni ...

Notez que si vous voulez diriger la sortie de lsvers grep(qui, comme l'a souligné devnull , n'est jamais une bonne idée), assurez-vous d'utiliser \lsou command lsparce que si lsest aliasé pour vous montrer la sortie colorée (comme c'est le cas sur Debian par exemple) , sa sortie contient des séquences d'échappement ANSI pour créer une sortie colorée, qui se déclenchera grepsi votre motif est ancré au début de la ligne.


1
Vous pouvez utiliser -A( au lieu de -a) ignorer ., ...
OJFord

@ OJFord + -Adiffère des -arépertoires qui lsdescendent dans, mais les deux sont (également) ignorés et inutiles pour les noms spécifiés sur la ligne de commande avec -deffet. De plus, si lsest aliasé --color=auto alors la tuyauterie est correcte; seulement --color=alwaysou --colorcause des problèmes.
dave_thompson_085

0

La solution de val0x00ff est vraiment bonne, mais elle oublie les répertoires cachés.

Si vous voulez des fichiers cachés et des répertoires cachés , sans. et .. :

find -maxdepth 1 -regex '\./\..+' -printf "%P\n"

Votre suggestion échoue sur VMware ESXi (ne répertorie aucun fichier et aucun répertoire) et échoue également sur Linux (avec maxdepth> 1, elle répertorie également tous les fichiers dans un répertoire commençant par a.), Mais cela fonctionne à la fois sur Linux et ESXi: find . \( -type f -o -type d \) -name '\.*' -print; appliquer au maxdepthbesoin.
Jeroen Wiert Pluimers

0

Ci-dessous, l'un est beaucoup plus compact et prend en charge de nombreuses variantes

1) Afficher les fichiers, répertoires et sous-répertoires cachés

find . | grep "^\./\."

2) Afficher uniquement les répertoires et sous-répertoires cachés

find . -type d | grep "^\./\."

3) Afficher les fichiers cachés uniquement dans les sous-répertoires actuels et

find . -type f | grep "^\./\."

4) Afficher les fichiers et répertoires cachés dans le dossier actuel

find . -maxdepth 1 | grep "^\./\."


0

Tu peux essayer:

find . -maxdepth 1 -type f -name '\.*' -print
find . -maxdepth 1 \( -type f -o -type d \) -name '\.*' -print

Bien sûr, vous pouvez utiliser différentes maxdepthvaleurs ou les supprimer complètement. Très utile si vous souhaitez explorer entre les répertoires ( -type d) ou les fichiers normaux ( type f) ou les deux, et combiner avec d'autres fonctions comme:

(ex: dernière heure modifiée, basée sur l' exemple @piroux - complétée par @ jeroen-wiert-pluimers )

find . -maxdepth 1 \( -type f -o -type d \) -name '\.*' -exec stat -c %y {} \; -printf "%P\t"

-1

Tu peux essayer :

ls -a |grep -E  "^\."

^ indique que c'est le début du contenu avec regexp


1
Un doublon d' une autre réponse d'il y a 3 ans ...
Jeff Schaller

J'ai vu la réponse précédente, ce n'est pas en double, et certainement "ls -a" et "ls -Ad" n'ont pas la même signification. "-a" signifie que la liste de tous les fichiers / répertoires commence par "." -A signifie lister tout sauf "." , ".." et le contenu du répertoire.
Lingjing France
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.