J'ai un répertoire qui contient des milliers de fichiers, dont certains sont cachés.
La commande ls -a
liste tous les fichiers, y compris les fichiers cachés, mais je dois juste lister les fichiers cachés.
Quelle commande dois-je utiliser?
Si vous voulez simplement les fichiers dans votre répertoire actuel (pas de récursivité), vous pouvez le faire
echo .[^.]*
Cela va imprimer les noms de tous les fichiers dont le nom commence par .
et est suivi par un ou plusieurs caractères autres que des 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 '.*'
-mindepth
garantit que nous ne correspondons pas à .
et que -prune
signifie que find
ne descendra pas dans des sous-répertoires.
Utilisation de find
et awk
,
find . -type f | awk -F"/" '$NF ~ /^\..*$/ {print $NF}'
Explication:
find . -type f
- & gt; Répertorie tous les fichiers du répertoire en cours avec son chemin d'accès,
./foo.html
./bar.html
./.foo1
awk -F"/" '$NF ~ /^\..*$/ {print $NF}'
/
en tant que séparateur de champs awk vérifie si le dernier champ contient un point ou non. S'il commence par un point, il imprime le dernier champ de la ligne correspondante.
find
est généralement une meilleure option pour les recherches compliquées que l'utilisation de la globalisation des noms.
find . -mindepth 1 -maxdepth 1 -name '.*'
ou
find . -mindepth 1 -maxdepth 1 -name '.*' -o -name '*~'
find .
recherche le répertoire courant
-mindepth 1
exclut. et .. de la liste
-maxdepth 1
limite la recherche au répertoire en cours
-name '.*'
trouve des noms de fichiers commençant par un point
-o
ou
-name '*~'
recherche les noms de fichiers qui se terminent par un tilde (généralement, ce sont des fichiers de sauvegarde de programmes d'édition de texte)
Cependant, ceci et toutes les autres réponses manquent les fichiers qui se trouvent dans le fichier .hidden
du répertoire en cours. Si vous écrivez un script, ces lignes lisent le fichier .hidden
et affichent les noms de fichiers existants.
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
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 dans le répertoire de travail en cours.
grep "^\."
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., .. (il s'agit du répertoire courant et du répertoire parent).
Si certains noms de fichiers peuvent avoir plus d'une ligne avec "\n"
, l'exemple ci-dessus peut être incorrect.
Je suggère donc de suivre la commande pour résoudre le problème.
find -maxdepth 1 -name ".[!.]*"
Qu'est-ce que vous auriez pu faire d'autre, is ls .?*
ou ls .!(|)
qui vous montrerait tout ce qui se trouve dans les fichiers / dirs cachés actuels du répertoire et les autres fichiers / répertoires ci-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 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 ci-dessous.
[1:0:248][[email protected]: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 entre ls .?*
et @ cioby23 answer ls -d .[!.]* .??*
Et pourquoi il imprime deux fois des fichiers cachés parce que vous demandez littéralement deux fois .??*
, .?*
, .[!.]*
la même chose , l'ajout de l'un d'eux avec des caractères de commande différents sera imprimé deux fois.
Lire d'autres questions sur les étiquettes command-line gnome-terminal ls