Mostra solo i file nascosti (file di punti) in ls alias


43

Sto usando il comando

ls -a | grep '^\.'

per mostrare solo i file nascosti. Ho aggiunto la linea

alias hidden='ls -a | grep '^\.'' # show only hidden files

per .bash_aliasesil file

Ma questo non funziona. Probabilmente è il problema con il 'personaggio.

La prego di aiutarmi a scrivere l'alias corretto?


con esempi ancora più complessi, molto raramente devi passare da virgolette singole a doppie virgolette. Questo può essere fatto semplicemente mettendo le virgolette l'una contro l'altra. Per questo esempio, sarebbe 'ls -a | grep '"'"'^\.'"'"'Sembra orribile (e per questo esempio è completamente inutile perché puoi semplicemente scambiare virgolette doppie per una delle coppie), ma in occasioni molto rare è utile. Potresti anche voler -Cflag (forza l'output multi-colonna). Vedi questa immagine imgur.com/a/VIVFP
Dylan

Risposte:


27

O fai la coppia interna di virgolette virgolette doppie:

alias hidden='ls -a | grep "^\."'

O rendere la coppia esterna di virgolette doppie virgolette:

alias hidden="ls -a | grep '^\.'"

O fai tutte le virgolette doppie virgolette e fuggi dalla coppia interna:

alias hidden="ls -a | grep \"^\.\""

O renderlo una funzione, in modo da poter passare alcuni argomenti quando si chiama:

hidden() { ls -a "$@" | grep '^\.'; }

90

Chiedere alla shell di elencare i file punto e dire di lsnon vedere attraverso le directory:

ls -d .*

6
Ciò ha il vantaggio di consentire un elenco a più colonne, a differenza dell'approccio grepbasato su.
anol,

Tuttavia, mostra anche le directory (come detto). Un modo per mantenerlo semplice com'è e mostrare solo i file?
honzajde,

@honzajde La domanda non ha posto l'esclusione delle directory. Se vuoi escludere le directory, puoi usare ls -d .* | grep -v '^d'o (solo zsh)print -lr .*(.)
Gilles 'SO- smetti di essere malvagio'

questo non funziona per me, su Ubuntu 16.04
Andrew_1510

9
ls -Ad .* #This will list all the hidden files & directories while retaining the color & formatting

O

Per creare un alias dello stesso:

alias lh='ls -Ad .*'

O

La stessa cosa potrebbe essere fatta tramite il comando grep e l'operatore pipe; tuttavia perderebbe il colore e la formattazione:

ls -a|grep "^\." 

O

Via alias:

alias lh='ls -a|grep "^\."'

4

Puoi usare le virgolette doppie:

alias hidden="ls -a | grep '^\.'"

o concatena più stringhe tra virgolette singole

alias hidden='ls -a | grep '\''^\.'\'

o rimuovi tutte le virgolette interne

alias hidden='ls -a | grep ^\\.'

2

Per la cronaca, questo non sembra funzionare con me, poiché ls -astampa due (a volte più colonne). Consiglio di utilizzare l' -1opzione per assicurarsi che ogni file sia nella propria riga. Qualcosa come questo:

alias hidden='ls -a1 | grep "^\."'

Ho appena provato ls -a | catche esce ancora su 2 colonne. Dovrei menzionare che sto usando Solaris e non GNU ls. Forse è per questo. In ogni caso, la tua -1soluzione ha funzionato perfettamente ed è molto più elegante della mia soluzione alternativa. Sto aggiornando la mia risposta.
Rahmu,

Probabilmente ho perso questa discussione, ma guarda qui se qualcosa andrà storto.
xralf,

1

Rendendolo leggermente più complicato, ma evitando l' analisils .

llsh () { find "${@:-.}/" -maxdepth 1 -type f -name ".*" -ls; }

lsh () { find "${@:-.}/" -maxdepth 1 -type f -name ".*" -print; }

La funzione a due shell utilizzerà findper generare un elenco di tutti i file regolari nascosti nella directory corrente o nella directory indicata nella riga di comando.

La llshfunzione genererà un "elenco lungo" che sarà solo leggermente più dettagliato di ls -l, mentre lshgenera un elenco a colonna singola come ls -1.


0
find . -type f -name ".*"

O

find . -type f -name ".*" | while read file; do basename $file; done

Ciao! Potresti migliorare la tua risposta spiegando in dettaglio come funziona e anche menzionando perché, secondo te, risponde alla domanda.
Dhag,

0
# add it to ~/.bashrc

    hidden() {  # lists hidden files and directories
        find . -maxdepth 1 -name '.?*' -exec ls --color -d {} \;
        }

    hiddenfiles() { # lists hidden files
        find . -maxdepth 1 -type f -name '.?*' -exec ls --color -d {} \;
        }

    hiddendirs() { # lists directories
        find . -maxdepth 1 -type d -name '.?*' -exec ls --color -d {} \;
        }

-1

Il tuo lssupporto -A? Da man ls:

    -a, --all
          do not ignore entries starting with .

   -A, --almost-all
          do not list implied . and ..

$ ls --version
ls (GNU coreutils) 8.5
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  
Written by Richard M. Stallman and David MacKenzie.

Sì, ma volevo onlyfile nascosti.
xralf,

ls -A -1 -d -F .* | egrep -v '/$'
Waltinator,

-3

Basta semplicemente digitare il comando seguente e non confondere con le cose sopra spiegate.

ls -A -1 -d -F .* | egrep -v '/$'

Penso che l'OP abbia chiesto come scrivere un alias correttamente.
Contromodalità

1
Questa è solo una copia del commento di Waltinator sulla sua risposta. Affinché questa risposta sia utile, è necessario spiegare come e perché tali lsflag particolari e il egrepcomando rispondono alla domanda.
Anthony G - giustizia per Monica,

-3
ls -lart | sed -n "/ \.[A-Za-z0-9][A-Za-z0-9]*/p"

2
Potete per favore chiarire la vostra risposta, una riga di codice non viene considerata come una buona risposta
Romeo Ninov,

secondo il requisito deve elencare solo i file nascosti. quindi ho elencato tutti i file inclusi i file nascosti da ls -lart. poi ho usato regex per mostrare che i file che iniziano con punto (.). Ho avuto un risultato così.
Shailesh Chanderiya,

[g906016 @ hklu2574881: [PTA] ~] $ ls -lart | sed -n "/ \. [A-Za-z0-9] [A-Za-z0-9] * / p" -rw-r - r-- 1 g906016 g906016 658 29 dic 2016 .zshrc -rw- r - r-- 1 g906016 g906016 171 dic 29 2016 .kshrc -rw ------- 1 g906016 g906016 27 dic 29 2016 .k5login -rw-r - r-- 1 g906016 g906016 176 dic 29 2016. bash_profile -rw-r - r-- 1 g906016 g906016 18 dic 29 2016 .bash_logout -rwxr-xr-x 1 g906016 g906016 0 dic 2016 2016 .dir_colors drwxr-x --- 3 g906016 g906016 4096 dic 29 2016 .subversion
shailesh Chanderiya il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.