බාෂ් හි ls භාවිතා කරමින් නාමාවලි පමණක් ලැයිස්තුගත කිරීම?


977

මෙම විධානය වත්මන් මාර්ගයේ නාමාවලි ලැයිස්තුගත කරයි: ls -d */

රටාව හරියටම කරන්නේ */කුමක්ද?

ඉහත විධානයෙහි නිරපේක්ෂ මාර්ගය (උදා ls -d /home/alice/Documents) එම මාර්ගයේ ඇති නාමාවලි පමණක් ලැයිස්තුගත කිරීම සඳහා අපට ලබා දිය හැක්කේ කෙසේද?


7
ඇත්ත වශයෙන්ම අදහස් කරන්නේ කුමක්ද යන්න පැහැදිලි කරමින් මෙම පිළිතුර සඳහා සංස්කරණය බලන්න unix.stackexchange.com/a/75047/32647-d .
එව්ගනි සර්ජිව්

Answers:


1023

*/වත්මන් නාමාවලියෙහි *ඇති සියලුම උප බහලුම් වලට ගැලපෙන රටාවකි ( සියලුම ලිපිගොනු සහ උප බහලුම් වලට ගැලපේ ; /එය නාමාවලි වලට සීමා කරයි). ඒ හා සමානව, / home / alice / Documents යටතේ සියලුම උප බහලුම් ලැයිස්තුගත කිරීම සඳහා භාවිතා කරන්නls -d /home/alice/Documents/*/


90
*/සැඟවුණු ෆෝල්ඩර සමඟ නොගැලපෙන සටහන . ඒවා ඇතුළත් කිරීමට, එක්කෝ ඒවා පැහැදිලිවම කැමති ලෙස සඳහන් කරන්න ls -d .*/ */, නැතහොත් Bash හි dotglobවිකල්පය සකසන්න .
ගර්ගෝ

1
tytpillai එය සිදුවන්නේ ලැයිස්තු ගත කිරීමට උප බහලුම් නොමැති නිසාය. lsනොපවතින දෙයක් භාවිතා කරන ඕනෑම වේලාවක ඔබට එම දෝෂය ලැබෙනු ඇත.
ගෝර්ඩන් ඩේවිසන්

1
හරි ස්තූතියි, මම දැන් ඒ සඳහා පරික්ෂා කළ අතර එයින් පෙනෙන්නේ එකම ඩිරෙක්ටරිය මූල ෆෝල්ඩරය බවයි.
ytpillai

1
Ord ගෝර්ඩන් ඩේවිසන් බාෂ් විකල්පය සමඟ අසාර්ථක වීමේ පණිවිඩය වළක්වා ගත හැකියshopt -s nullglob

5
InaryBinaryZebra nullglob සැකසීම මඟින් දෝෂ පණිවිඩය මග හැරෙනු ඇත, නමුත් ඊටත් වඩා ව්‍යාකූලත්වයක් ඇති කරයි: nullglob set සහ උප බහලුම් නොමැතිව, ls */සාධාරණ ලෙස පුළුල් වන lsඅතර එය වත්මන් නාමාවලියෙහි ඇති සියලුම ගොනු ලැයිස්තුගත කරයි. මට හොඳටම විශ්වාසයි ඒ අවස්ථාවේ ඔබට අවශ්‍ය දේ එය නොවන බව.
ගෝර්ඩන් ඩේවිසන්

493

මෙය සිදු කිරීමට ක්‍රම හතරක් ඇත, එක් එක් වෙනස් ප්‍රතිදාන ආකෘතියක් ඇත

1. භාවිතා කිරීම echo

උදාහරණය : echo */, echo */*/
මෙන්න මට ලැබුණේ:

cs/ draft/ files/ hacks/ masters/ static/  
cs/code/ files/images/ static/images/ static/stylesheets/  

2. භාවිතා කිරීම lsපමණි

උදාහරණය: ls -d */
මෙන්න මට ලැබුණේ හරියටම:

cs/     files/      masters/  
draft/  hacks/      static/  

හෝ ලැයිස්තුවක් ලෙස (විස්තරාත්මක තොරතුරු සහිතව): ls -dl */

3. භාවිතා කිරීම lsසහgrep

උදාහරණය: ls -l | grep "^d" මෙන්න මට ලැබුණු දේ:

drwxr-xr-x  24 h  staff     816 Jun  8 10:55 cs  
drwxr-xr-x   6 h  staff     204 Jun  8 10:55 draft  
drwxr-xr-x   9 h  staff     306 Jun  8 10:55 files  
drwxr-xr-x   2 h  staff      68 Jun  9 13:19 hacks  
drwxr-xr-x   6 h  staff     204 Jun  8 10:55 masters  
drwxr-xr-x   4 h  staff     136 Jun  8 10:55 static  

4. බෑෂ් ස්ක්‍රිප්ට් (අවකාශයන් අඩංගු ගොනු නාමයක් සඳහා නිර්දේශ නොකරයි)

උදාහරණය: for i in $(ls -d */); do echo ${i%%/}; done
මෙන්න මට ලැබුණු දේ:

cs  
draft  
files  
hacks  
masters  
static

අවසන් අක්‍ෂරය ලෙස '/' ලබා ගැනීමට ඔබ කැමති නම්, විධානය වනුයේ: for i in $(ls -d */); do echo ${i}; done

cs/  
draft/  
files/  
hacks/  
masters/  
static/

2
සැ.යු. 3මට අනෙක් අයට වඩා සැලකිය යුතු ලෙස මන්දගාමී විය. මම පරීක්ෂා කළ නාමාවලියෙහි: 1.012s, 2.016s, 3 .055s , 4.021s.
සමාවයවිකතාව

සමාවයවිකතාවන්, ඔබ කාලය මනින්නේ කෙසේද? කවර ආකාරයකින්ද? මාර්ගය වන විට, මට කියන්නට ඇත, නැත 1මගේ ප්රියතම එකක්.
ඇල්බට්

ඇල්බට්, මම භාවිතා කළා time, යුනික්ස් ශ්‍රිතය. /// මම එකඟයි, echo */වඩා දක්ෂයි ls -d */.
සමාවයවිකතාව

9
ඔබ සටහන් කළ යුතු සුළු කරුණු දෙකක්. ls -l | grep "^ d" නාමාවලි වලට සංකේතාත්මක සම්බන්ධතා පෙරහන් කරන අතර 'ls -d * /' ඒවා පෙන්වයි. ඉලක්කගත නාමාවලියෙහි කිසිදු නාමාවලියක් නොමැති නම් 'ls -d * /' අසමත් වේ.
සෝරන් පැව්ලොවික්

15
මෙම 1.අවකාශයන් ඇති බව ෆෝල්ඩර නම් සමඟ කටයුතු කරන විට විකල්පය ප්රධාන වේදනාව හේතු වනු ඇත.
ශ්‍රීකාන්ත් ෂරත්

102

මම භාවිතා කරන්නේ:

ls -d */ | cut -f1 -d'/'

මෙය පසුගාමී කප්පාදුවක් නොමැතිව තනි තීරුවක් නිර්මාණය කරයි - ස්ක්‍රිප්ට් සඳහා ප්‍රයෝජනවත් වේ.

මගේ ශත දෙක.


18
සඳහා වන -1විකල්පය lsතනි තීරු ආකෘතියෙන් මෙන්ම ප්‍රතිදානය කරයි ls -1 -d */.
කාලින්

3
@ user29020 -1සෑම ප්‍රවේශයක් සඳහාම තවමත් කප්පාදුවක් ලබා දෙන බව සැලකිල්ලට ගත යුතුය .
ඩෙනිස්

මම මෙය .bashrcඅන්වර්ථයක් ලෙස එකතු කළ විට, මා එකතු කරන්නේ කෙසේද '/'?
ආර්එන්ඒ

@ ආර්එන්ඒ පිළිතුරු දීමට ප්‍රමාද, නමුත් අනාගත පුද්ගලයින් සඳහා: බැක්ස්ලෑෂ් එකකින් පැන යාමට උත්සාහ කරන්න? '\/'
කේක්

1
ප්‍රමුඛ කප්පාදුවක් තිබේ නම් කැඩී යයි. මෙය පසුපස කප්පාදුව පමණක් ඉවත් කරයි:| sed -e 's-/$--'
වික්ටර් සර්ජියන්කෝ

62

උප ෆෝල්ඩර නොමැති සියලුම ෆෝල්ඩර සඳහා :

find /home/alice/Documents -maxdepth 1 -type d

උප ෆෝල්ඩර සහිත සියලුම ෆෝල්ඩර සඳහා :

find /home/alice/Documents -type d

2
ප්‍රශ්නයට ගැලපෙන පරිදි (නමුත් තිත් ගොනු ඇතුළත් කරන්න), පළමුවැන්න විය යුත්තේ: find /home/alice/Documents -maxdepth 1 -mindepth 1 -type dඑසේ නොමැතිනම් ඔබම ඇතුළත් /home/alice/Documentsවේ. නාමාවලි වලට සිම්ලින්ක් ඇතුළත් කිරීමට, උපසර්ගය-L
jhnc

මෙම කාර්යය සඳහා සැබවින්ම සාදන ලද මෙවලම සොයා ගැනීම බැවින් මෙය වඩාත් ම විසඳුම් ලෙස පෙනේ. ඔබට පළමු ප්‍රති result ලය බැහැර කළ හැකිය - ./ වත්මන් නාමාවලිය සඳහා - grep -v '^ \ ./$' වෙත නල මාර්ගයෙන්
සිලිකන්රොක්ස්ටාර්

38

4 (වැඩි) විශ්වසනීය විකල්ප.

ලැයිස්තුගත ෙනොකළ තරු ලකුණ *ෂෙල් විසින් රටාවක් (glob) ලෙස අර්ථ කරනු ඇත.
කවචය එය මාර්ග නාම ප්‍රසාරනයේදී භාවිතා කරයි.
ඉන්පසු එය රටාවට ගැලපෙන ගොනු නාම ලැයිස්තුවක් ජනනය කරනු ඇත.
සරල තරු ලකුණක් PWD හි ඇති සියලුම ගොනු නාමයන්ට ගැලපේ (වර්තමාන වැඩ කරන නාමාවලිය). අවසන් වන සියලුම ගොනු නාමයන්ට ගැලපෙන
පරිදි වඩාත් සංකීර්ණ රටාවක් . මේ අනුව, සියලුම නාමාවලි. විධානය:*//

1.- දෝංකාරය.

echo */
echo ./*/              ### avoid misinterpreting filenames like "-e dir"

echoපීඩබ්ලිව්ඩී හි සියලුම නාමාවලි වලට (කවචයෙන් ) පුළුල් කරනු ඇත .


මෙය පරීක්ෂා කිරීම සඳහා: mkdirtest-dir වැනි නාමාවලියක් සාදන්න , සහ ඒ cdතුළට:

mkdir test-dir; cd test-dir

නාමාවලි කිහිපයක් සාදන්න:

mkdir {cs,files,masters,draft,static}   # safe directories.
mkdir {*,-,--,-v\ var,-h,-n,dir\ with\ spaces}  # some a bit less secure.
touch -- 'file with spaces' '-a' '-l' 'filename'    # and some files:

echo ./*/අමුතු නම් කරන ලද ලිපිගොනු සමඟ වුවද විධානය විශ්වාසදායක වනු ඇත:

./--/ ./-/ ./*/ ./cs/ ./dir with spaces/ ./draft/ ./files/ ./-h/
./masters/ ./-n/ ./static/ ./-v var/

නමුත් ගොනු නාමවල ඇති අවකාශය කියවීම ටිකක් අවුල් සහගත කරයි.


ඒ වෙනුවට echo, අපි භාවිතා කරන්නේ නම් ls, කවචය තවමත් ගොනු නාම ලැයිස්තුව පුළුල් කරයි. පීඩබ්ලිව්ඩී හි නාමාවලි ලැයිස්තුවක් ලබා ගැනීමට හේතුව කවචයයි. එක් එක් නාමාවලියෙහි අන්තර්ගතය වෙනුවට (පෙරනිමියෙන් ඉදිරිපත් කර ඇති පරිදි) එය වර්තමාන නාමාවලි ප්‍රවේශය ලැයිස්තුගත -dකිරීමට ඇති විකල්පය ls.

ls -d */

කෙසේ වෙතත්, මෙම විධානය (තරමක්) අඩු විශ්වසනීය ය. ඉහත ලැයිස්තුගත කර ඇති අමුතු නම් කළ ගොනු සමඟ එය අසාර්ථක වනු ඇත. එය නම් කිහිපයකින් යටපත් වේ. ගැටළු ඇති අය සොයා ගන්නා තෙක් ඔබ එකින් එක මකා දැමිය යුතුය.

2.- ls

GNU lsවිසින් "විකල්පවල අවසානය" ( --) යතුර පිළිගනු ඇත .

ls -d ./*/                     ### more reliable BSD ls
ls -d -- */                    ### more reliable GNU ls

3.-printf

එක් එක් නාමාවලිය තමන්ගේම පේළියේ ලැයිස්තු ගත කිරීම සඳහා (එක් තීරුවක, ls -1 ට සමාන), භාවිතා කරන්න:

$ printf "%s\n" */        ### Correct even with "-", spaces or newlines.

ඊටත් වඩා හොඳයි, අපට පසුපසින් ඉවත් කළ හැකිය /:

$ set -- */; printf "%s\n" "${@%/}"        ### Correct with spaces and newlines.

මේ වගේ උත්සාහයක්:

$ for i in $(ls -d */); do echo ${i%%/}; done

අසමත් වනු ඇත:

  • ls -d */දැනටමත් ඉහත පෙන්වා ඇති පරිදි සමහර නම් ( ).
  • හි වටිනාකමට බලපානු ඇත IFS.
  • අවකාශ සහ ටැබ් වල නම් බෙදනු ඇත (පෙරනිමියෙන් IFS).
  • නාමයේ සෑම නව රේඛාවක්ම නව echo විධානයක් ආරම්භ කරනු ඇත.

4.- ක්‍රියාකාරිත්වය

අවසාන වශයෙන්, ශ්‍රිතයක් තුළ ඇති තර්ක ලැයිස්තුව භාවිතා කිරීම වර්තමාන ධාවන කවචයේ තර්ක ලැයිස්තුවට බලපාන්නේ නැත. සරලවම:

$ listdirs(){ set -- */; printf "%s\n" "${@%/}"; }
$ listdirs

මෙම ලැයිස්තුව ඉදිරිපත් කරයි:

--
-
*
cs
dir with spaces
draft
files
-h
masters
-n
static
-v var

අමුතු ගොනු නාම කිහිපයක් සමඟ මෙම විකල්ප ආරක්ෂිත වේ.


මම හිතන්නේ ඔබ සේෆ් යන වචනය විශ්වසනීය ලෙස ආදේශ කළ යුතුයි. ඔබගේ ලිපිය මා සිතන්නේ අනෙක් විසඳුම් 'අනාරක්ෂිත' (අවදානමට ලක්විය හැකි හෝ සූරාකෑමට ලක්විය හැකි) බවයි
ඇමඩෝ මාටිනස්

1
MAmadoMartinez සාමාන්‍ය දෙයක් / ආරක්ෂිත / විශ්වාසදායක / කළා. වඩා හොඳ?

21

මෙම treeවිධානය මෙහි ද ලස්සන ප්රයෝජනවත් වේ. පෙරනිමියෙන් එය සියළුම ලිපිගොනු සහ නාමාවලි සම්පූර්ණ ගැඹුරකට පෙන්වනු ඇත, සමහර ascii අක්ෂර නාමාවලි ගස පෙන්වයි.

$ tree
.
├── config.dat
├── data
   ├── data1.bin
   ├── data2.inf
   └── sql
|      └── data3.sql
├── images
   ├── background.jpg
   ├── icon.gif
   └── logo.jpg
├── program.exe
└── readme.txt

නමුත් අපට අවශ්‍ය වී ඇත්තේ ඩිරෙක්ටරි පමණක් ලබා ගැනීමට නම්, ඇසි ගසකින් තොරව, සහ වත්මන් ඩිරෙක්ටරියේ සම්පූර්ණ මාර්ගය සමඟ, ඔබට කළ හැකිය:

$ tree -dfi
.
./data
./data/sql
./images

තර්ක වන්නේ:

-d     List directories only.
-f     Prints the full path prefix for each file.
-i     Makes tree not print the indentation lines, useful when used in conjunction with the -f option.

ඔබට නිරපේක්ෂ මාර්ගය අවශ්‍ය නම්, වත්මන් ඩිරෙක්ටරියට සම්පූර්ණ මාර්ගය නියම කිරීමෙන් ඔබට ආරම්භ කළ හැකිය:

$ tree -dfi "$(pwd)"
/home/alice/Documents
/home/alice/Documents/data
/home/alice/Documents/data/sql
/home/alice/Documents/images

උප බහලුම් ගණන සීමා කිරීම සඳහා, ඔබට උප බහලුම්වල උපරිම මට්ටම සැකසිය හැකිය -L level, උදා:

$ tree -dfi -L 1 "$(pwd)"
/home/alice/Documents
/home/alice/Documents/data
/home/alice/Documents/images

මිනිසාගේ ගස සමඟ තවත් තර්ක දැකිය හැකිය


16

'Ls -d * /' වෙතින් ලැබෙන ප්‍රතිදානය ඔබට පසුපස කප්පාදු දෙකක් ලබා දෙන්නේ මන්දැයි ඔබ කල්පනා කරන්නේ නම් :

[prompt]$ ls -d */    
app//  cgi-bin//  lib//        pub//

සමහර විට ඔබේ කවචය හෝ සැසි වින්‍යාස ගොනු වෙනත් තැනක සිට ls විධානය -S ධජය ඇතුළත් ls අනුවාදයකට ගෙන යන නිසා විය හැකිය. එම ධජය එක් එක් ප්‍රතිදාන නාමයට අක්ෂරයක් එක් කරයි (එය සරල ගොනුවක් නොවේ) එය කුමන ආකාරයේද යන්න දක්වයි. එබැවින් එක් කප්පාදුවක් '* /' රටාවට ගැලපීම වන අතර අනෙක් කප්පාදුව එකතු කළ වර්ගයේ දර්ශකය වේ.

මෙම ගැටළුව මඟහරවා ගැනීම සඳහා, ඔබට ls සඳහා වෙනත් අන්වර්ථයක් අර්ථ දැක්විය හැකිය. කෙසේ වෙතත්, තාවකාලිකව අන්වර්ථය ඉල්ලා නොසිටීම සඳහා, ඔබට බැක්ස්ලෑෂ් සමඟ විධානය සකස් කළ හැකිය:

\ ls -d * /


11

මම මෙය මගේ .bashrcගොනුවට එක් කරමි (ඔබට එය එක් සැසියකට පමණක් අවශ්‍ය නම් / අවශ්‍ය නම් විධාන රේඛාවේ ටයිප් කළ හැකිය)

alias lsd='ls -ld */'

එවිට lsd අපේක්ෂිත ප්‍රති .ලය ලබා දෙනු ඇත.


ඔබට පමණක් භාවිතා කළ නොහැකිද? ls -l මාර්ගය | grep dr
jrobertsz66

6
"එවිට lsd අපේක්ෂිත ප්‍රති .ලය ලබා දෙනු ඇත." මම සිනාසෙමි
fbafelipe

1
මගේ අත්දැකීම් අනුව, එය ප්රති .ලයක් ලබා දෙයි.
ටොඩ්

සැඟවුණු නාමාවලි ද ඇතුළත් කිරීමට මම 'ලාඩ්' (සියලුම නාමාවලි ලැයිස්තුගත කරන්න) භාවිතා කරමි. ඇත්ත වශයෙන්ම, නවෝත්පාදනය මා කෙරෙහි ද අහිමි නොවේ.
DryLabRebel

11

lsනාමාවලි වලට සමමුහුර්ත කිරීම් ඇතුළුව සත්‍ය විසඳුම

මෙහි බොහෝ පිළිතුරු සත්‍ය වශයෙන්ම උප බහලුම් ගැලපීම සඳහා ආදේශක කාඩ්පත් භාවිතා කරන අතරම ls(හෝ එය සුළු අර්ථයෙන් පමණක් භාවිතා නොකරයි ls -d. සත්‍ය lsවිසඳුමක් ප්‍රයෝජනවත් වේ, මන්ද එය lsපිළිවෙලට වර්ග කිරීම සඳහා විකල්ප භාවිතා කිරීමට ඉඩ සලසයි .

සිම්ලින්ක් බැහැර කිරීම

භාවිතා කරමින් එක් විසඳුමක් lsලබා දී ඇත, නමුත් එය අනෙක් විසඳුම් වලට වඩා වෙනස් දෙයක් කරයි, එය නාමාවලි වලට සමමුහුර්ත කිරීම් බැහැර කරයි :

ls -l | grep '^d'

(සමහර විට ගොනු නාම හරහා නල මාර්ගගත කිරීම sedහෝ awkහුදකලා කිරීම)

සිම්ලින්ක් ඇතුළුව

ඩිරෙක්ටරි සඳහා සිම්ලින්ක් ඇතුළත් කළ යුතු (බොහෝ විට වඩාත් පොදු) නඩුවේදී, අපට -pවිකල්පය භාවිතා කළ හැකිය ls, එමඟින් ඩිරෙක්ටරිවල නම් (සිම්ලින්ක් කළ ඒවා ද ඇතුළුව) කප්පාදු අක්ෂරයක් එකතු කරයි:

ls -1p | grep '/$'

හෝ, පසුපස කප්පාදුවලින් මිදීම:

ls -1p | grep '/$' | sed 's/\/$//'

අපට lsඅවශ්‍ය පරිදි විකල්ප එකතු කළ හැකිය (දිගු ලැයිස්තුවක් භාවිතා කරන්නේ -1නම් , එය තවදුරටත් අවශ්‍ය නොවේ).

සටහන: අපි නම් අවශ්ය අවර කප්පාදු කරන, නමුත් අවශ්ය නැහැ ඔවුන් විසින් අවධාරණය grep, අපි hackishly රේඛාව සැබෑ ගැලපෙන කොටස හිස් කරමින් විසින් අවධාරණය ඉවත් කළ හැක:

ls -1p | grep -P '(?=/$)'

9

සැඟවුණු නාමාවලිය ලැයිස්තුගත කිරීමට අවශ්‍ය නොවේ නම්, මම ඉදිරිපත් කරන්නේ:

ls -l | grep "^d" | awk -F" " '{print $9}'  

සැඟවුණු නාමාවලි ලැයිස්තුගත කිරීමට අවශ්‍ය නම්, භාවිතා කරන්න:

ls -Al | grep "^d" | awk -F" " '{print $9}'

හෝ

find -maxdepth 1 -type d | awk -F"./" '{print $2}'

ඔබට වැඩි විස්තර දැන ගැනීමට අවශ්‍ය නම් awkකරුණාකර මෙම පිළිතුර
PHP Learner

වෙනත් පිළිතුරු සමඟ සසඳන විට "ls .. | grep ... | awk" හි පළමු විකල්පය අධික ලෙස පිටපත් කිරීමක් ලෙස පෙනේ.
ලාර්ස් නෝර්ඩින්

1
ඔබ උපකල්පනය කරන්නේ කිසිදු නාමාවලියක ඔවුන්ගේ නම් තුළ හිස් අවකාශයක් නොමැති බවයි.
බෙන්ජමින් ආර්

7

නැතිව ෆෝල්ඩර ලැයිස්තු පෙන්වීමට /

ls -d */|sed 's|[/]||g'

2
හෝls -d1 */ | tr -d "/"
ccpizza

බාහිර විධානයක් ඇමතීමට අවශ්‍ය නැත:set -- */; printf "%s\n" "${@%/}"

මම හොලොන්ඩා විසඳුමට කැමතියි. මගේ ටිකක් කෙටි විසඳුම (පරීක්ෂා කර ක්‍රියා කරයි): ls -d * / | sed 's | / || g'
klor

Lsdir අන්වර්ථයක් තිබීමද ප්‍රයෝජනවත් වේ: අන්වර්ථය lsdirs = "ls -d * / | sed 's | / || g'"
klor

6

මෙන්න මම භාවිතා කරන දේ

ls -d1 /Directory/Path/*;


මෙය සැබවින්ම පේළියකින් පෙන්වීමට හොඳ විසඳුමකි.
නිකොලායි ෆ්‍රික්

එය නාමාවලි පමණක් ලැයිස්තුගත නොකරයි. ඔබ පසුපස කප්පාදුවක් එක් කළ යුතුය:ls -d1 /Directory/Path/*/
ස්කිපි ලෙ ග්‍රෑන්ඩ් ගුරෝ

6

නාමාවලි පමණක් ලැයිස්තුගත කිරීම සඳහා :

ls -l | grep ^d

ගොනු පමණක් ලැයිස්තුගත කිරීම සඳහා :

ls -l | grep -v ^d 

හෝ ඔබට පහත පරිදි කළ හැකිය: ls -ld * /


6

මෙය උත්සාහ කරන්න. එය සියලුම ලිනක්ස් ඩිස්ට්‍රෝස් සඳහා ක්‍රියා කරයි.

ls -ltr | grep drw

5
ls -l | grep '^d' | awk '{print $9}'
dw1

5

වත්මන් නාමාවලියෙහි සරල ලැයිස්තුවක්, එය මෙසේ වනු ඇත:

ls -1d */

ඔබට එය වර්ග කර පිරිසිදු කිරීමට අවශ්‍යද?

ls -1d */ | cut -c 3- | rev | cut -c 2- | rev | sort

මතක තබා ගන්න: ප්‍රාග්ධනීකෘත අක්ෂර වර්ග කිරීමෙහි වෙනස් හැසිරීම් ඇත


4

අයිතමය සමඟ නාමාවලියක් තිබේදැයි පරීක්ෂා කරන්න test -d:

for i in $(ls); do test -d $i && echo $i ; done

1
කරුණාකර මෙම කේතය කරන්නේ කුමක්ද සහ එය ප්‍රශ්නයට සම්බන්ධ වන්නේ කෙසේද යන්න පැහැදිලි කරන්න.
කෙන් වයිඑන්

1
ප්රතිදානය ටෙස්ට්-ing හරහා වළළු එය නම්, එම එක් එක් නාමාවලියක් හා සුප්රසිද්ධ echo විධානය-ing නම් කෘති එය teh විධානය 'ls' දිවෙන පසුව .. නමුත් වඩා හොඳ ක්රම ඇත
ShoeLace

3

*/ යනු වත්මන් නාමාවලියෙහි ඇති නාමාවලි වලට ගැලපෙන ගොනු නාම ගැලපුම් රටාවකි.

නාමාවලි පමණක් ලැයිස්තුගත කිරීමට, මම මෙම ශ්‍රිතයට කැමතියි:

# long list only directories
llod () { 
  ls -l --color=always "$@" | grep --color=never '^d'
}

එය ඔබේ .bashrc තුළට දමන්න.

භාවිත උදාහරණ:

llod       # long listing of all directories in current directory
llod -tr   # same but in chronological order oldest first
llod -d a* # limit to directories beginning with letter 'a'
llod -d .* # limit to hidden directories

සටහන: ඔබ -iවිකල්පය භාවිතා කරන්නේ නම් එය කැඩී යනු ඇත . මෙන්න ඒ සඳහා විසඳුමක්:

# long list only directories
llod () { 
  ls -l --color=always "$@" | egrep --color=never '^d|^[[:digit:]]+ d'
}

3

FYI, ඔබට සියලුම ලිපිගොනු බහු පේළියේ මුද්‍රණය කිරීමට අවශ්‍ය නම්, ඔබට ls -1එක් එක් ගොනුව වෙනම පේළියකින් මුද්‍රණය කළ හැකිය . file1 file2 file3


2

නාමාවලි ලැයිස්තුගත කිරීම සඳහා එක්-ලයිනර් "මෙතැනින්"

ගොනු ගණන සමඟ.

for i in `ls -d */`; do g=`find ./$i -type f -print| wc -l`; echo "Directory $i contains $g files."; done

2

මම අර්ධ වශයෙන් විසඳුවේ:

cd "/path/to/pricipal/folder"

for i in $(ls -d .*/); do sudo ln -s "$PWD"/${i%%/} /home/inukaze/${i%%/}; done

ln: «/home/inukaze/./.»: can't overwrite a directory
ln: «/home/inukaze/../..»: can't overwrite a directory
ln: accesing to «/home/inukaze/.config»: too much symbolics links levels
ln: accesing to «/home/inukaze/.disruptive»: too much symbolics links levels
ln: accesing to «/home/inukaze/innovations»: too much symbolics links levels
ln: accesing to «/home/inukaze/sarl»: too much symbolics links levels
ln: accesing to «/home/inukaze/.e_old»: too much symbolics links levels
ln: accesing to «/home/inukaze/.gnome2_private»: too much symbolics links levels
ln: accesing to «/home/inukaze/.gvfs»: too much symbolics links levels
ln: accesing to «/home/inukaze/.kde»: too much symbolics links levels
ln: accesing to «/home/inukaze/.local»: too much symbolics links levels
ln: accesing to «/home/inukaze/.xVideoServiceThief»: too much symbolics links levels

හොඳයි, මෙය මට අඩු කරන්න, නගරාධිපති කොටස :)


2

එය සම්පූර්ණ රවුමක් බවට පත් කිරීම, සෑම ෆෝල්ඩරයකම මාර්ගය ලබා ගැනීම සඳහා, ඇල්බට්ගේ පිළිතුර මෙන්ම ගෝර්ඩන්ස් ද භාවිතා කර එය ප්‍රයෝජනවත් විය යුතුය.

for i in $(ls -d /pathto/parent/folder/*/); do echo ${i%%/}; done

ප්‍රතිදානය:

/pathto/parent/folder/childfolder1/
/pathto/parent/folder/childfolder2/
/pathto/parent/folder/childfolder3/
/pathto/parent/folder/childfolder4/
/pathto/parent/folder/childfolder5/
/pathto/parent/folder/childfolder6/
/pathto/parent/folder/childfolder7/
/pathto/parent/folder/childfolder8/


1

නාමාවලි නාම පමණක් ලැයිස්තුගත කිරීම සඳහා මා භාවිතා කරන්නේ මෙන්න:

ls -1d /some/folder/*/ | awk -F "/" "{print \$(NF-1)}"

1

මුල් ප්‍රශ්නයට පිළිතුරු දීමට, එක් එක් */සම්බන්ධය නැත ls; එය ලෙස හැඳින්වෙන ක්රියාවලිය තුළ, ෂෙල් / බෑෂ් විසින් සිදු කරනු ලබයි globbing .

මේ නිසයි echo */හා ls -d */ප්රතිදානය එකම අංග. ( -dධජය මඟින් lsප්‍රතිදානය කරන්නේ නාමාවලි නාමයන් මිස නාමාවලි වල අන්තර්ගතය නොවේ.)


1

මෙන්න ගස භාවිතා කරන විචලනයකි, එය නාමාවලි නාමයන් වෙනම රේඛාවලින් පමණක් ප්‍රතිදානය කරයි, ඔව් එය කැත නමුත් ඒයි, එය ක්‍රියා කරයි.

tree -d | grep -E '^[├|└]' | cut -d ' ' -f2

නැත්නම් අමුතුයි

tree -d | grep -E '^[├|└]' | awk '{print $2}'

කෙසේ වෙතත් මෙය බොහෝ විට වඩා හොඳ වන අතර /පසු නාමාවලියෙහි නම රඳවා ගනු ඇත .

ls -l | grep "^d" | awk '{print $9}'

0
file *|grep directory

O / P (මගේ යන්ත්‍රයේ) -

[root@rhel6 ~]# file *|grep directory
mongo-example-master:    directory
nostarch:                directory
scriptzz:                directory
splunk:                  directory
testdir:                 directory

කප්පාදුව භාවිතා කිරීමෙන් ඉහත ප්‍රතිදානය වැඩි දියුණු කළ හැකිය.

file *|grep directory|cut -d':' -f1
mongo-example-master
nostarch
scriptzz
splunk
testdir

* could be replaced with any path that's permitted
 file - determine file type
 grep - searches for string named directory
 -d - to specify a field delimiter
 -f1 - denotes field 1
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.