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 .*
කරනු ඇත