Come mostrare solo i file nascosti nel terminale?

104

Ho una directory che contiene migliaia di file, alcuni dei quali sono nascosti.

Il comando ls -a elenca tutti i file, compresi quelli nascosti, ma ho solo bisogno di elencare i file nascosti.

Quale comando dovrei usare?

    
posta nux 19.05.2014 - 02:10

10 risposte

134

Il comando:

ls -ld .?* 

Elenca solo i file nascosti.

Spiega:

 -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 
    
risposta data nux 19.05.2014 - 02:10
28
ls -d .!(|.)

Esattamente ciò che l'OP sta cercando.

    
risposta data patrick 19.05.2014 - 06:52
13

Se vuoi solo i file nella tua directory corrente (nessuna ricorsione), puoi fare

echo .[^.]*

Questo stamperà i nomi di tutti i file il cui nome inizia con . ed è seguito da uno o più caratteri senza punto. Nota che questo fallirà per i file il cui nome inizia con punti consecutivi, quindi per esempio ....foo non verrà mostrato.

Potresti anche utilizzare find :

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

Il -mindepth garantisce che non corrispondano . e -prune significa che find non discenderà in sottodirectory.

    
risposta data terdon 19.05.2014 - 04:57
11
ls -ad .*

funziona per me in Bash.

    
risposta data Mark 19.05.2014 - 06:55
4

Utilizzo di find e awk ,

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

Spiegazione:

find . -type f - & gt; Elenca tutti i file nella directory corrente insieme al suo percorso come,

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

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

/ come separatore di campi awk controlla l'ultimo campo che fissa con un punto o meno. Se inizia con un punto, stampa l'ultimo campo della linea corrispondente.

    
risposta data Avinash Raj 19.05.2014 - 04:46
2

find è in genere un'opzione migliore per ricerche complicate rispetto all'utilizzo del globbing dei nomi.

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

o

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

find . cerca la directory corrente

-mindepth 1 esclude. e .. dalla lista

-maxdepth 1 limita la ricerca alla directory corrente

-name '.*' trova i nomi di file che iniziano con un punto

-o o

-name '*~' trova i nomi di file che terminano con una tilde (di solito, questi sono file di backup da programmi di modifica del testo)

Tuttavia, questa e tutte le altre risposte perdono i file presenti nel file .hidden della directory corrente. Se stai scrivendo uno script, queste righe leggeranno il file .hidden e visualizzeranno i nomi dei file di quelli esistenti.

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
    
risposta data Mark H 19.05.2014 - 23:24
2

Penso che tu possa farlo con il seguente comando.

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

ls -a comando che hai inserito, che mostra tutti i file e le directory nella directory di lavoro corrente.

grep "^\." comando I aggiunto, che filtra l'output per mostrare solo i file nascosti (Il suo nome inizia con "." ).

grep -v "^\.$" | grep -v "^\..$" comando I aggiunto, che filtra l'output da escludere., .. (Sono directory corrente e principale).

Se alcuni nomi di file possono avere più di una riga con "\n" , sopra l'esempio potrebbe essere errato.

Quindi suggerisco di seguire il comando per risolvere il problema.

find -maxdepth 1 -name ".[!.]*"
    
risposta data xiaodongjie 19.05.2014 - 04:00
2

Cos'altro avresti potuto fare, is ls .?* O ls .!(|) che ti mostrerà tutto ciò che è nella directory attuale file nascosti / dirs in alto e altri file / dirs in basso

ad es. dal mio terminale

$ 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

Ora nota nei risultati sopra, mostra ogni file / dir con la sua sottodirectory e tutti i file nascosti qui sotto.

[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

Mi dispiace, non posso commentare. per spiegare la differenza tra ls .?* e @ cioby23 answer ls -d .[!.]* .??* E perché in realtà sta stampando i file nascosti due volte perché letteralmente stai chiedendo il doppio di .??* , .?* , .[!.]* sono la stessa cosa , quindi aggiungere qualcuno di loro con caratteri di comando diversi verrà stampato due volte.

    
risposta data amrx 19.03.2015 - 06:47
1

Puoi anche usare:

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

Ciò ti consentirà di visualizzare normali file nascosti e file nascosti che iniziano con 2 o 3 punti, ad esempio: ..hidden_file

    
risposta data cioby23 19.05.2014 - 07:05
1

puoi usare il comando

ls -Ad .??*

Questo ha il vantaggio di consentire l'elenco di più colonne, a differenza dell'approccio basato su grep nelle soluzioni ls -a | grep "^\."

    
risposta data Maythux 06.05.2015 - 17:46

Leggi altre domande sui tag