ටර්මිනලයේ සැඟවුණු ගොනු පමණක් පෙන්වන්නේ කෙසේද?


174

මා සතුව ලිපිගොනු දහස් ගණනක් අඩංගු නාමාවලියක් ඇත, සමහර ඒවා සඟවා ඇත.

ls -aසැඟවුණු ගොනු ඇතුළුව සියලුම ලිපිගොනු විධාන ලැයිස්තුගත කරයි, නමුත් මට අවශ්‍ය වන්නේ සැඟවුණු ගොනු ලැයිස්තුගත කිරීමයි.

මා භාවිතා කළ යුතු විධානය කුමක්ද?


3
සරල ls -ld .*හෝ ක්‍රියා ls -ald .*කරනු ඇත
ජෝන් ස්ට්‍රූඩ්

Answers:


217

විධානය:

ls -ld .?* 

සැඟවුණු ගොනු පමණක් ලැයිස්තුගත කරයි.

පැහැදිලි කරන්න:

 -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 

8
ඔබට එහි ප්‍රශ්න ලකුණු දෙක අවශ්‍ය නොවේ, * එය ආවරණය කරයි (? ඕනෑම තනි අක්ෂරයකට පමණක් ගැලපේ, * ඒවායින් ඕනෑම ගණනකට ගැලපේ).
psusi

13
@psusi, මම අභිප්රායෙන් ඉවත් කිරීමට සිතන්නේ .සහ ..තරගයේ සිට. කෙසේ වෙතත් එය ද වැනි (හොඳින් නීති ගත කර ඇති) තනි චරිතය සඟවා ගොනු නාමය ඉවත් කරනු ඇත .a, .1සහ යනාදි. සමහර විට වඩා හොඳ විස්තාරණ ග්ලෝබ් එකක් වනු ඇත, .!(|.)එනම් වචනානුසාරයෙන් තිතක් අනුගමනය කිරීමෙන් කිසිවක් හෝ වෙනත් (තනි) තිතක් හැර වෙනත් කිසිවක් නැතls -d .!(|.)
වානේ ඩ්‍රයිවර්

el ස්ටීල්ඩ්‍රයිවර්, පිළිවෙලට, ?? අනුවාදය "බැහැර කරයි." හා "..". මෙය සිත්ගන්නාසුලු විකාරයක ප්‍රති result ලයක් ලෙස පෙනේ: එසේ නොවේ ද? * * තිතකට නොගැලපේ, නමුත්? ගැලපිය යුතුයි දෙයක් එසේ නම ඉවත් වේ.
psusi

නාමාවලි සහ ලිපිගොනු හඳුනා ගැනීම සඳහා F විකල්පය එක් කරන්න, එනම් ls -ldF.? * ඩිරෙක්ටරි නාමවල අවසන් වරට පෙන්වන ලද අක්‍ෂර ලිපිගොනු නොමැති බැවින් "/" ඇත.
ආර්සීඑෆ්

1
.Vim වැනි සැඟවුණු ෆෝල්ඩරයක් ලැයිස්තුගත කිරීම හැර මෙය බොහෝ දුරට ක්‍රියාත්මක වේ. මම එය ls -ldp වගේ ටිකක් වෙනස් කරනවා.? * | grep -v / මෙය සැඟවුණු ලිපිගොනු සැඟවුණු ෆෝල්ඩරයක් පමණක් ලැයිස්තුගත කරයි
ෆ්‍රෙඩ් යැං

33
ls -d .!(|.)

OP සොයන දේ හරියටම කරයි.


1
එය ක්‍රියාත්මක වන්නේ කෙසේද?
SarcasticSully

ලැයිස්තු නාමාවලිය a. එකක් නොමැතිව කිසිවක් ලැයිස්තුගත නොකරන්න යනු එය බොහෝ සෙයින් පරිවර්තනය කිරීමයි.
පැට්‍රික්

1
තුළ !(pattern-list), pattern-listරටා එකක් හෝ වැඩි ගණනකින් වෙන් කර ඇති බව මට වැටහී ඇත |, නමුත් ඔබට වම් පසින් කිසිදු රටාවක් නොමැති වීම මට ව්‍යාකූල වේ |. කරුණාකර ඔබට එම වාක්‍ය ඛණ්ඩය මට පැහැදිලි කළ හැකිද?
කාලෝස් මෙන්ඩෝසා

2
හිස් රටාව බවට පත් කරන බව @CarlosMendoza, ඒ නිසා මෙම වගේ .(කිසිවක් හෝ අනුගමනය නොවේ .), හැර .ම හා ...
මුරු

18

ඔබගේ වර්තමාන නාමාවලියෙහි ඇති ගොනු ඔබට අවශ්‍ය නම් (පුනරාවර්තනයක් නොමැත), ඔබට එය කළ හැකිය

echo .[^.]*

එමඟින් a සමඟ ආරම්භ වන .සහ පසුව තිත් නොවන අක්ෂර එකක් හෝ වැඩි ගණනක් ඇති සියලුම ලිපිගොනු වල නම් මුද්‍රණය කෙරේ . අඛණ්ඩ තිත් වලින් ආරම්භ වන ලිපිගොනු සඳහා මෙය අසමත් වන බව සලකන්න, උදාහරණයක් ....fooලෙස පෙන්වන්නේ නැත.

ඔබට මෙයද භාවිතා කළ හැකිය find:

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

මෙම -mindepthවගකීම අප නොගැලපේ .සහ -pruneඑහි අර්ථය වන්නේ findඋප බහලුම් තුලට පැමිණෙන නැහැ.



4

භාවිතා කිරීම findසහ awk,

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

පැහැදිලි කිරීම:

find . -type f -> වත්මන් ඩිරෙක්ටරියේ ඇති සියලුම ගොනු එහි මාර්ගය සමඟ ලැයිස්තුගත කරන්න,

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

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

/ක්ෂේත්‍ර බෙදුම්කරු අවතාරයක් ලෙස තිත් සමඟ නොපෙනී යන අවසාන ක්ෂේත්‍රය පරීක්ෂා කරයි. එය තිතකින් ආරම්භ වන්නේ නම්, එම අනුරූප රේඛාවේ අවසාන ක්ෂේත්‍රය මුද්‍රණය කරයි.


ඔබට භාවිතා කළ හැකිය find -type f. ඔබට සෙවුම් මාර්ගය පැහැදිලිව සැකසීමට අවශ්‍ය නැත -name "*".
ටර්ඩන්

3

find සාමාන්‍යයෙන් නම සෙවීම වෙනුවට සංකීර්ණ සෙවීම් සඳහා වඩා හොඳ විකල්පයකි.

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

හෝ

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

find . වත්මන් නාමාවලිය සොයයි

-mindepth 1බැහැර කරයි. සහ .. ලැයිස්තුවෙන්

-maxdepth 1 සෙවීම වත්මන් නාමාවලියට සීමා කරයි

-name '.*' තිතකින් ආරම්භ වන ගොනු නම් සොයා ගන්න

-o හෝ

-name '*~' ටයිල්ඩ් එකකින් අවසන් වන ගොනු නම් සොයා ගන්න (සාමාන්‍යයෙන් මේවා පෙළ සංස්කරණ වැඩසටහන් වලින් උපස්ථ ගොනු වේ)

කෙසේ වෙතත්, මෙය සහ අනෙකුත් සියලුම පිළිතුරු වත්මන් ඩිරෙක්ටරියේ .hiddenගොනුවේ ඇති ගොනු මග හැරේ. ඔබ ස්ක්‍රිප්ට් එකක් ලියන්නේ නම්, මෙම රේඛා මඟින් .hiddenගොනුව කියවා පවතින අයගේ ගොනු නම් පෙන්වනු ඇත.

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

මෙම මොකක්ද .hiddenගොනු? .hiddenලිපිගොනු නම් අඩංගු ගොනුවක් කවදා හෝ පවතින්නේ ඇයි ? කෙසේ වෙතත්, එකක් තිබේ නම් ඔබට අවශ්‍ය සියල්ල තිබියදී ඔබ සංකීර්ණ දෙයක් කරන්නේ cat .hiddenඇයි? ඔබගේ findවිධානය නිවැරදි ය (ish) නමුත් එය -name '*~'අදාල නොවේ. ටයිල්ඩ් වලින් අවසන් වන ලිපිගොනු උපස්ථ ගොනු වන නමුත් කිසිදු ආකාරයකින් සඟවා නැත.
ටර්ඩන්

dterdon .hiddenගොනුව තිතක් සමඟ ආරම්භ කිරීම සඳහා ගොනුව / ෆෝල්ඩරයේ නම වෙනස් කළ නොහැකි විට ඔබට සැඟවීමට අවශ්‍ය ගොනු සහ ෆෝල්ඩර සඳහා වේ. ටයිල්ඩ් වලින් අවසන් වන ගොනු සඳහා, එය පද්ධතිය මත රඳා පවතී. ls -Bබොහෝ GUI ගොනු ගවේෂකයන් මෙන් එවැනි ගොනු නොසලකා හරිනු ඇත.
මාර්ක් එච්

cat .hidden.hiddenගොනුවට එකතු කිරීමෙන් පසු එම ලිපිගොනු මකා දැමුවහොත් හෝ ගෙන ගියහොත් තවදුරටත් නොපවතින ගොනු පෙන්වනු ඇත .
මාර්ක් එච්

මෙය හොඳින් ක්‍රියාත්මක වේ.
පෙන්ගේ ජෙන්ග්

2

පහත දැක්වෙන විධානයෙන් ඔබට එය කළ හැකි යැයි මම සිතමි.

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

ls -a ඔබ ඇතුලත් කළ විධානය, එය වත්මන් වැඩ කරන නාමාවලියෙහි ඇති සියලුම ගොනු සහ නාමාවලි පෙන්වයි.

grep "^\."සැඟවුණු ලිපිගොනු පමණක් පෙන්වීමට ප්‍රතිදානය පෙරහන් කරන විධානය මා විසින් එකතු කරන ලදි (එහි නම ආරම්භ වන්නේ ".").

grep -v "^\.$" | grep -v "^\..$" මම එකතු කළ විධානය, බැහැර කිරීම සඳහා ප්‍රතිදානය පෙරහන් කරයි., .. (ඒවා වත්මන් සහ මව් නාමාවලියයි).

සමහර ගොනු නාමයන් සමඟ පේළියකට වඩා තිබිය හැකි නම් "\n", ඉහත උදාහරණය වැරදිය.

එබැවින් එය විසඳීම සඳහා පහත දැක්වෙන විධානය යෝජනා කරමි.

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


@ RaduRădeanu ඔබේ අදහස මම දුටුවෙමි, එය ඉතා හොඳයි. මම නැවතත් මගේ පිළිතුර සංස්කරණය කළෙමි. ඔබගේ අදහස් දැක්වීමට ස්තූතියි.
xiaodongjie

2

ඔබට තවත් කුමක් කළ හැකිද, is ls .?*නැතහොත් ls .!(|)එමඟින් දැනට පවතින සැඟවුණු ලිපිගොනු / ඉහළින් ඇති සියල්ලම සහ පහත දැක්වෙන අනෙකුත් ලිපිගොනු / ඩිරර් පෙන්වනු ඇත

උදා: මගේ පර්යන්තයෙන්

$ 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

දැන් ඉහත ප්‍රති results ලවල සටහන් කරන්න, එය සෑම ගොනුවක්ම / ඩිර් එකක් එහි උප ඩිරර් සහ ඕනෑම සැඟවුණු ලිපිගොනු පහතින් පෙන්වයි.

[1:0:248][ebaron@37signals: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

කණගාටුයි, මට අදහස් දැක්විය නොහැක. අතර මෙහි වෙනස පැහැදිලි කිරීමට ls .?*cioby23 පිළිතුර හා @ ls -d .[!.]* .??*ඇයි ඒක ඇත්තටම සඟවා ගොනු දෙවරක් මුද්රණය ඇත වචනාර්ථයෙන් ඔබ දෙවරක් ඉල්ලන්නේ නිසා ය .??*, .?*, .[!.]*විවිධ විධාන චරිත සමඟ ඔවුන් ඕනෑම එකතු දෙවරක් මුද්රණය කරනු ඇත ඒ නිසා ඔවුන්, එකම දේයි.


1

ඔබට මෙයද භාවිතා කළ හැකිය:

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

තිත් 2 හෝ 3 කින් ආරම්භ වන සාමාන්‍ය සැඟවුණු ගොනු සහ සැඟවුණු ගොනු ප්‍රදර්ශනය කිරීමට මෙය ඔබට ඉඩ සලසයි: ..hidden_file


1
මේ සමඟ මට සියලු සැඟවුණු ලිපිගොනු දෙවරක් ලැබේ.
TuKsn

1

ඔබට විධානය භාවිතා කළ හැකිය

ls -Ad .??*

ls -a | grep "^\."විසඳුම් වල ඇති grep මත පදනම් වූ ප්‍රවේශය මෙන් නොව, බහු තීරු ලැයිස්තුගත කිරීමට ඉඩ දීමේ වාසිය මෙයයි


1

මේ දක්වා ඇති සියලුම පිළිතුරු පදනම් වී ඇත්තේ තිතක් සමඟ ආරම්භ වන ලිපිගොනු (හෝ නාමාවලි) “සැඟවී” ඇති බැවිනි. මම තවත් විසඳුමක් ඉදිරිපත් කළෙමි, එය එතරම් කාර්යක්ෂම නොවනු ඇත, නමුත් මෙම විසඳුම සැඟවුණු ලිපිගොනු වල නම් ගැන කිසිවක් උපකල්පනය නොකරයි, එබැවින් ලැයිස්තුගත කිරීමෙන් වළකින්න.. result සිටී (දැනට පිළිගත් පිළිතුර මෙන්).

සම්පූර්ණ විධානය:

ls -d $(echo -e "$(\ls)\n$(\ls -A)" | sort | uniq -u)

පැහැදිලි කිරීම

මෙය කරන්නේ සියලුම ගොනු (සහ නාමාවලි) දෙවරක් ලැයිස්තුගත කිරීමයි,

echo -e "$(\ls)\n$(\ls -A)"

නමුත් සැඟවුණු ගොනු එක් වරක් පමණක් පෙන්වයි -A .

එවිට ලැයිස්තුව වර්ග කර ඇත | sort ඇති අතර එමඟින් නිත්‍ය (නොපෙනෙන) ලිපිගොනු දෙවරක් සහ එකිනෙකට යාබදව දිස් වේ.

ඉන්පසු, එක් වරකට වඩා පෙනෙන සියලුම රේඛා ඉවත් කරන්න | uniq -u , අද්විතීය රේඛා පමණක් ඉතිරි කරන්න.

lsපරිශීලකයාගේ අභිරුචි විකල්ප සමඟ සහ ලැයිස්තුවේ ඇති නාමාවලි වල අන්තර්ගතය ලැයිස්තුගත නොකර සියලුම ගොනු ලැයිස්තුගත කිරීමට අවසාන වශයෙන් නැවත භාවිතා කරන්න -d.

සංස්කරණය කරන්න (සීමාවන්):

මුරු පෙන්වා දුන් පරිදි, ගොනු නාම පේළි දෙකකට බෙදෙන escaped\ncharacter.txtනිසා නම් සහිත ලිපිගොනු තිබේ නම් මෙම විසඳුම නිවැරදිව ක්‍රියා නොකරනු echo -eඇත. සඟවා වැනි, විශේෂ චරිත හැර පාහේ ම නම ගොනු දෙකක් තිබේ නම් එය ද නැති බලාපොරොත්තු වූ පරිදි කටයුතු කරනු .foo[tab].txtසහ .foo[new-line].txtඑම දෙකම ලෙස මුද්රණය කර ඇත ලෙස .foo?.txtවිසින් ඉවත් කළ යුතු බවuniq -u


1
සැඟවුණු ලිපිගොනු වල අර්ථ දැක්වීම එයයි. මෙම සැඟවුණු ලිපිගොනු වල මූලාරම්භය පවා .පළමු අක්‍ෂරය ලෙස කටයුතු කිරීමේදී ඇති වූ දෝෂයකි .
මුරු

පළමු ඡේදයේ (ඇත්ත වශයෙන්ම) මම එය සඳහන් කරමි. කෙසේ වෙතත් එය දැනට පිළිගත් පිළිතුරට වඩා වෙනස්
ප්‍රති result ලයක්

නිසැකවම, එය බැහැර කරයි .., නමුත් විශේෂ අක්ෂර අඩංගු ගොනු නාම සමඟ එය කෙතරම් හොඳින් ක්‍රියා කරයිදැයි මම කල්පනා කරමි.
මුරු

විශේෂ අක්ෂරවලින් ඔබ අදහස් කරන්නේ කුමක්දැයි මම හරියටම නොදනිමි, නමුත් මෙම විසඳුම ගොනු නාමයන් ගැන කිසිවක් උපකල්පනය නොකරන බැවින් එය ගැටළුවක් නොවනු ඇතැයි මම සිතමි
alejandro

ඇත්ත වශයෙන්ම, ඔබ අවම වශයෙන් එක් දෙයක් වත් උපකල්පනය කරයි: ගොනු නාමවල නව රේඛා නොමැත. එසේම: ලිපිගොනු වල echo -eඅර්ථ නිරූපණය වන ගැලවීමේ අනුපිළිවෙලක් නොමැත . එසේම: lsවිවිධ ගොනු නාමයන් එකම ලෙස දර්ශනය වන පරිදි ගොනු නාමයන් හසුරුවන්නේ නැත (නිදසුනක් ලෙස, සමහර අනුවාද වල විශේෂ අක්ෂර සඳහා lsභාවිතා ?වේ, එබැවින් .foo\tbar( \t=> පටිත්ත) සහ .foo\nbar( \n=> නව රේඛාව) දෙකම ලෙස පෙන්වනු ඇත foo?bar).
මුරු

1

විකල්පයක් ලෙස, ඔබට ද භාවිතා කළ හැකිය echo .*

උදා

user@linux:~$ echo .*
. .. .bash_aliases .bash_history .bash_logout .bashrc
user@linux:~$

ඔබ එය දිගු ලැයිස්තු ආකෘතියෙන් කැමති නම්, සුදු අවකාශය නව රේඛාවකට පරිවර්තනය කරන්න.

user@linux:~$ echo .* | tr ' ' '\n'
.
..
.bash_aliases
.bash_history
.bash_logout
.bashrc
user@linux:~$ 

0

බෑෂ් සමඟ, GLOBIGNOREවිශේෂ විචල්‍යය සැකසීම හිස් නොවන අගයක් වන අතර එය නොසලකා හැරීමට .සහ ..ග්ලෝබ් පුළුල් කිරීමේදී ප්‍රමාණවත් වේ . සිට මෙම බෑෂ් ලේඛන :

මෙම GLOBIGNOREෂෙල් විචල්ය රටාවක් හා ගැලපෙන වෙනස්වීම් යන ගොනු නාමය කුලකයකි සීමා කිරීමට භාවිතා කල හැක. GLOBIGNOREසකසා ඇත්නම් , එක් රටාවකට ගැලපෙන සෑම ගැලපෙන ගොනු නාමයක්ම ගැලපුම් GLOBIGNOREලැයිස්තුවෙන් ඉවත් කරනු ලැබේ. nocaseglobවිකල්පය සකසා ඇත්නම්, රටාවන්ට ගැලපීම GLOBIGNOREනඩුව නොසලකා සිදු කරනු ලැබේ. ගොනු නාම .සහ ..ඒවා GLOBIGNOREසකසා ඇති විට නොසලකා හරිනු ලැබේ. කෙසේ වෙතත්, GLOBIGNOREශුන්‍ය නොවන අගයකට සැකසීම ඩොට්ග්ලොබ් ෂෙල් විකල්පය සක්‍රීය කිරීමේ බලපෑමක් ඇති කරයි, එබැවින් ‘.' සමඟ ආරම්භ වන අනෙකුත් සියලුම ගොනු නාමයන් ගැලපෙනු ඇත.

අපි එය සකසා ඇත්නම් .:.., දෙකම .සහ.. නොසලකා හරිනු ඇත. එය ශුන්‍ය නොවන ඕනෑම දෙයකට සැකසීම ද මෙම හැසිරීම ලබා ගන්නා බැවින්, අපි එය සාධාරණ ලෙස සකසා ගත හැකිය.

ඒ නිසා:

GLOBIGNORE=.
ls -d .*
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.