Answers:
විධානය:
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
.සහ ..තරගයේ සිට. කෙසේ වෙතත් එය ද වැනි (හොඳින් නීති ගත කර ඇති) තනි චරිතය සඟවා ගොනු නාමය ඉවත් කරනු ඇත .a, .1සහ යනාදි. සමහර විට වඩා හොඳ විස්තාරණ ග්ලෝබ් එකක් වනු ඇත, .!(|.)එනම් වචනානුසාරයෙන් තිතක් අනුගමනය කිරීමෙන් කිසිවක් හෝ වෙනත් (තනි) තිතක් හැර වෙනත් කිසිවක් නැතls -d .!(|.)
ls -d .!(|.)
OP සොයන දේ හරියටම කරයි.
!(pattern-list), pattern-listරටා එකක් හෝ වැඩි ගණනකින් වෙන් කර ඇති බව මට වැටහී ඇත |, නමුත් ඔබට වම් පසින් කිසිදු රටාවක් නොමැති වීම මට ව්යාකූල වේ |. කරුණාකර ඔබට එම වාක්ය ඛණ්ඩය මට පැහැදිලි කළ හැකිද?
.(කිසිවක් හෝ අනුගමනය නොවේ .), හැර .ම හා ...
ඔබගේ වර්තමාන නාමාවලියෙහි ඇති ගොනු ඔබට අවශ්ය නම් (පුනරාවර්තනයක් නොමැත), ඔබට එය කළ හැකිය
echo .[^.]*
එමඟින් a සමඟ ආරම්භ වන .සහ පසුව තිත් නොවන අක්ෂර එකක් හෝ වැඩි ගණනක් ඇති සියලුම ලිපිගොනු වල නම් මුද්රණය කෙරේ . අඛණ්ඩ තිත් වලින් ආරම්භ වන ලිපිගොනු සඳහා මෙය අසමත් වන බව සලකන්න, උදාහරණයක් ....fooලෙස පෙන්වන්නේ නැත.
ඔබට මෙයද භාවිතා කළ හැකිය find:
find -mindepth 1 -prune -name '.*'
මෙම -mindepthවගකීම අප නොගැලපේ .සහ -pruneඑහි අර්ථය වන්නේ findඋප බහලුම් තුලට පැමිණෙන නැහැ.
භාවිතා කිරීම 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 "*".
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 '*~'අදාල නොවේ. ටයිල්ඩ් වලින් අවසන් වන ලිපිගොනු උපස්ථ ගොනු වන නමුත් කිසිදු ආකාරයකින් සඟවා නැත.
.hiddenගොනුව තිතක් සමඟ ආරම්භ කිරීම සඳහා ගොනුව / ෆෝල්ඩරයේ නම වෙනස් කළ නොහැකි විට ඔබට සැඟවීමට අවශ්ය ගොනු සහ ෆෝල්ඩර සඳහා වේ. ටයිල්ඩ් වලින් අවසන් වන ගොනු සඳහා, එය පද්ධතිය මත රඳා පවතී. ls -Bබොහෝ GUI ගොනු ගවේෂකයන් මෙන් එවැනි ගොනු නොසලකා හරිනු ඇත.
cat .hidden.hiddenගොනුවට එකතු කිරීමෙන් පසු එම ලිපිගොනු මකා දැමුවහොත් හෝ ගෙන ගියහොත් තවදුරටත් නොපවතින ගොනු පෙන්වනු ඇත .
පහත දැක්වෙන විධානයෙන් ඔබට එය කළ හැකි යැයි මම සිතමි.
ls -a | grep "^\." | grep -v "^\.$" | grep -v "^\..$"
ls -a ඔබ ඇතුලත් කළ විධානය, එය වත්මන් වැඩ කරන නාමාවලියෙහි ඇති සියලුම ගොනු සහ නාමාවලි පෙන්වයි.
grep "^\."සැඟවුණු ලිපිගොනු පමණක් පෙන්වීමට ප්රතිදානය පෙරහන් කරන විධානය මා විසින් එකතු කරන ලදි (එහි නම ආරම්භ වන්නේ ".").
grep -v "^\.$" | grep -v "^\..$" මම එකතු කළ විධානය, බැහැර කිරීම සඳහා ප්රතිදානය පෙරහන් කරයි., .. (ඒවා වත්මන් සහ මව් නාමාවලියයි).
සමහර ගොනු නාමයන් සමඟ පේළියකට වඩා තිබිය හැකි නම් "\n", ඉහත උදාහරණය වැරදිය.
එබැවින් එය විසඳීම සඳහා පහත දැක්වෙන විධානය යෝජනා කරමි.
find -maxdepth 1 -name ".[!.]*"
ls නොකළ යුතුය .
ඔබට තවත් කුමක් කළ හැකිද, 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 .[!.]* .??*ඇයි ඒක ඇත්තටම සඟවා ගොනු දෙවරක් මුද්රණය ඇත වචනාර්ථයෙන් ඔබ දෙවරක් ඉල්ලන්නේ නිසා ය .??*, .?*, .[!.]*විවිධ විධාන චරිත සමඟ ඔවුන් ඕනෑම එකතු දෙවරක් මුද්රණය කරනු ඇත ඒ නිසා ඔවුන්, එකම දේයි.
මේ දක්වා ඇති සියලුම පිළිතුරු පදනම් වී ඇත්තේ තිතක් සමඟ ආරම්භ වන ලිපිගොනු (හෝ නාමාවලි) “සැඟවී” ඇති බැවිනි. මම තවත් විසඳුමක් ඉදිරිපත් කළෙමි, එය එතරම් කාර්යක්ෂම නොවනු ඇත, නමුත් මෙම විසඳුම සැඟවුණු ලිපිගොනු වල නම් ගැන කිසිවක් උපකල්පනය නොකරයි, එබැවින් ලැයිස්තුගත කිරීමෙන් වළකින්න.. 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
.පළමු අක්ෂරය ලෙස කටයුතු කිරීමේදී ඇති වූ දෝෂයකි .
.., නමුත් විශේෂ අක්ෂර අඩංගු ගොනු නාම සමඟ එය කෙතරම් හොඳින් ක්රියා කරයිදැයි මම කල්පනා කරමි.
echo -eඅර්ථ නිරූපණය වන ගැලවීමේ අනුපිළිවෙලක් නොමැත . එසේම: lsවිවිධ ගොනු නාමයන් එකම ලෙස දර්ශනය වන පරිදි ගොනු නාමයන් හසුරුවන්නේ නැත (නිදසුනක් ලෙස, සමහර අනුවාද වල විශේෂ අක්ෂර සඳහා lsභාවිතා ?වේ, එබැවින් .foo\tbar( \t=> පටිත්ත) සහ .foo\nbar( \n=> නව රේඛාව) දෙකම ලෙස පෙන්වනු ඇත foo?bar).
විකල්පයක් ලෙස, ඔබට ද භාවිතා කළ හැකිය 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:~$
බෑෂ් සමඟ, GLOBIGNOREවිශේෂ විචල්යය සැකසීම හිස් නොවන අගයක් වන අතර එය නොසලකා හැරීමට .සහ ..ග්ලෝබ් පුළුල් කිරීමේදී ප්රමාණවත් වේ . සිට මෙම බෑෂ් ලේඛන :
මෙම
GLOBIGNOREෂෙල් විචල්ය රටාවක් හා ගැලපෙන වෙනස්වීම් යන ගොනු නාමය කුලකයකි සීමා කිරීමට භාවිතා කල හැක.GLOBIGNOREසකසා ඇත්නම් , එක් රටාවකට ගැලපෙන සෑම ගැලපෙන ගොනු නාමයක්ම ගැලපුම්GLOBIGNOREලැයිස්තුවෙන් ඉවත් කරනු ලැබේ.nocaseglobවිකල්පය සකසා ඇත්නම්, රටාවන්ට ගැලපීමGLOBIGNOREනඩුව නොසලකා සිදු කරනු ලැබේ. ගොනු නාම.සහ..ඒවාGLOBIGNOREසකසා ඇති විට නොසලකා හරිනු ලැබේ. කෙසේ වෙතත්,GLOBIGNOREශුන්ය නොවන අගයකට සැකසීම ඩොට්ග්ලොබ් ෂෙල් විකල්පය සක්රීය කිරීමේ බලපෑමක් ඇති කරයි, එබැවින්‘.' සමඟ ආරම්භ වන අනෙකුත් සියලුම ගොනු නාමයන් ගැලපෙනු ඇත.
අපි එය සකසා ඇත්නම් .:.., දෙකම .සහ.. නොසලකා හරිනු ඇත. එය ශුන්ය නොවන ඕනෑම දෙයකට සැකසීම ද මෙම හැසිරීම ලබා ගන්නා බැවින්, අපි එය සාධාරණ ලෙස සකසා ගත හැකිය.
ඒ නිසා:
GLOBIGNORE=.
ls -d .*
ls -ld .*හෝ ක්රියාls -ald .*කරනු ඇත