Vraag Hoe laat ik alleen verborgen bestanden in Terminal zien?


Ik heb een map met duizenden bestanden, waarvan sommige verborgen zijn.

Het bevel ls -a lijst van alle bestanden, inclusief verborgen bestanden, maar ik moet alleen de verborgen bestanden weergeven.

Welke opdracht moet ik gebruiken?


107
2018-05-19 00:10


oorsprong


Een eenvoudige ls -ld .* of ls -ald .* zal werken - John Strood


antwoorden:


Het bevel :

ls -ld .?* 

Zal alleen verborgen bestanden weergeven.

Leg uit :

 -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 

134
2018-05-19 00:10



Je hebt de twee vraagtekens daar niet nodig, de * dekt het (? Komt alleen overeen met een enkel teken, * komt overeen met een willekeurig aantal). - psusi
@psusi, ik denk dat het de bedoeling is om uit te sluiten . en .. uit de wedstrijd. Het zal echter ook (volkomen legale) verborgen verborgen bestandsnamen uitsluiten, zoals .a, .1 enzovoort. Misschien zou een betere uitgebreide glob zijn .!(|.) d.w.z. letterlijke punt gevolgd door alles behalve niets of een andere (enkele) punt, d.w.z. ls -d .!(|.) - steeldriver
@steeldriver, netjes, de ?? versie sluit "." en "..". Dit lijkt het resultaat te zijn van een interessante gril: ook niet? noch * komen overeen met een punt, maar de? moet overeenkomen iets anders wordt de naam genegeerd. - psusi
Om mappen en bestanden te identificeren voegt u de F-optie toe, d.w.z. ls -ldF.? * Mapnamen hebben "/" als laatst weergegeven karakterbestanden niet. - RCF
Dit werkt bijna, maar het bevat ook een verborgen map zoals .vim, die ik hier niet als een bestand beschouw. Ik wijzig het een beetje zoals ls-LDP.? * | grep -v / Deze lijst bevat alleen verborgen bestanden en geen verborgen map - Fred Yang


ls -d .!(|.)

Doet precies waar OP naar op zoek is.


28
2018-05-19 04:52



Hoe werkt dat? - SarcasticSully
lijst met directory alles met een. en niets opsommen zonder dat is wat het zo ongeveer vertaalt. - patrick


Als je alleen de bestanden in je huidige map wilt (geen recursie), zou je dat kunnen doen

echo .[^.]*

Dat zal de namen van alle bestanden waarvan de naam begint met een . en wordt gevolgd door een of meer niet-punt tekens. Merk op dat dit zal mislukken voor bestanden waarvan de naam begint met opeenvolgende punten, dus bijvoorbeeld ....foo zal niet worden getoond.

Je zou ook kunnen gebruiken find:

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

De -mindepth zorgt ervoor dat we niet matchen . en de -prune betekent dat find zal niet afdalen in submappen.


13
2018-05-19 02:57





ls -ad .*

werkt voor mij in Bash.


11
2018-05-19 04:55



Shows . en .. in Bash - Penghe Geng


Gebruik makend van find en awk,

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

Uitleg:

find . -type f -> Maak een lijst van alle bestanden in de huidige map, samen met het pad zoals,

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

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

/ als veldscheidingsteken awk controleert of het laatste veld met een puntje starend is of niet. Als het begint met een punt, wordt het laatste veld van die overeenkomstige lijn afgedrukt.


4
2018-05-19 02:46



Je zou het gewoon kunnen gebruiken find -type f. U hoeft niet expliciet het zoekpad in te stellen of -name "*". - terdon♦


find is meestal een betere optie voor gecompliceerde zoekopdrachten dan het gebruik van naambolling.

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

of

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

find . doorzoekt de huidige map

-mindepth 1 Exclusief. en .. uit de lijst

-maxdepth 1 beperkt de zoekopdracht tot de huidige map

-name '.*' vind bestandsnamen die beginnen met een punt

-o of

-name '*~' vind bestandsnamen die eindigen op een tilde (meestal zijn dit back-upbestanden van tekstbewerkingsprogramma's)

Dit en alle andere antwoorden missen echter bestanden die zich in de huidige directory's bevinden .hidden het dossier. Als u een script aan het schrijven bent, lezen deze regels de .hidden bestand en toon de bestandsnamen van de bestaande.

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

3
2018-05-19 21:24



Wat is het .hidden het dossier? Waarom zou er ooit een bestand worden genoemd? .hidden die de bestandsnamen bevat? Hoe dan ook, als er een is waarom zou je iets doen dat zo ingewikkeld zou zijn als alles wat je nodig zou hebben zou zijn cat .hidden? Jouw find opdracht is correct (ish) maar de -name '*~' is niet relevant. Bestanden die eindigen in tildes zijn back-upbestanden maar zijn op geen enkele manier verborgen. - terdon♦
@terdon The .hidden bestand is voor bestanden en mappen die u wilt verbergen als u de bestands- / mapnaam niet kunt wijzigen om met een punt te beginnen. Voor bestanden die eindigen in tildes, hangt het van het systeem af. ls -B negeert dergelijke bestanden, net als de meeste GUI-bestandsverkenners. - Mark H
cat .hidden kan bestanden tonen die niet meer bestaan ​​als deze bestanden zijn verwijderd of verplaatst sinds ze zijn toegevoegd aan de .hidden het dossier. - Mark H
Dit werkt goed. - Penghe Geng


Ik denk dat je het kunt doen met het volgende commando.

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

ls -a opdracht die u hebt ingevoerd, die alle bestanden en mappen in de huidige werkmap toont.

grep "^\." opdracht die ik heb toegevoegd, die de uitvoer filtert om alleen verborgen bestanden weer te geven (de naam begint met ".").

grep -v "^\.$" | grep -v "^\..$" opdracht die ik heb toegevoegd, die de uitvoer filtert om uit te sluiten., .. (ze zijn de huidige en bovenliggende directory).

Als sommige bestandsnamen meer dan een regel kunnen hebben "\n", bovenstaand voorbeeld kan onjuist zijn.

Dus ik stel voor het volgende commando te volgen om het probleem op te lossen.

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

2
2018-05-19 02:00



Je zou moeten analyseer nooit de uitvoer van ls. - Radu Rădeanu
@ RaduRădeanu Ik zag je reactie, het is zo goed. Ik heb mijn antwoord opnieuw bewerkt. Bedankt voor je reactie. - xiaodongjie