Answers:
*/
වත්මන් නාමාවලියෙහි *
ඇති සියලුම උප බහලුම් වලට ගැලපෙන රටාවකි ( සියලුම ලිපිගොනු සහ උප බහලුම් වලට ගැලපේ ; /
එය නාමාවලි වලට සීමා කරයි). ඒ හා සමානව, / home / alice / Documents යටතේ සියලුම උප බහලුම් ලැයිස්තුගත කිරීම සඳහා භාවිතා කරන්නls -d /home/alice/Documents/*/
*/
සැඟවුණු ෆෝල්ඩර සමඟ නොගැලපෙන සටහන . ඒවා ඇතුළත් කිරීමට, එක්කෝ ඒවා පැහැදිලිවම කැමති ලෙස සඳහන් කරන්න ls -d .*/ */
, නැතහොත් Bash හි dotglob
විකල්පය සකසන්න .
ls
නොපවතින දෙයක් භාවිතා කරන ඕනෑම වේලාවක ඔබට එම දෝෂය ලැබෙනු ඇත.
ls */
සාධාරණ ලෙස පුළුල් වන ls
අතර එය වත්මන් නාමාවලියෙහි ඇති සියලුම ගොනු ලැයිස්තුගත කරයි. මට හොඳටම විශ්වාසයි ඒ අවස්ථාවේ ඔබට අවශ්ය දේ එය නොවන බව.
echo
උදාහරණය : echo */
, echo */*/
මෙන්න මට ලැබුණේ:
cs/ draft/ files/ hacks/ masters/ static/
cs/code/ files/images/ static/images/ static/stylesheets/
ls
පමණිඋදාහරණය: ls -d */
මෙන්න මට ලැබුණේ හරියටම:
cs/ files/ masters/
draft/ hacks/ static/
හෝ ලැයිස්තුවක් ලෙස (විස්තරාත්මක තොරතුරු සහිතව): ls -dl */
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
උදාහරණය: 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/
3
මට අනෙක් අයට වඩා සැලකිය යුතු ලෙස මන්දගාමී විය. මම පරීක්ෂා කළ නාමාවලියෙහි: 1
.012s, 2
.016s, 3
.055s , 4
.021s.
1
මගේ ප්රියතම එකක්.
time
, යුනික්ස් ශ්රිතය. /// මම එකඟයි, echo */
වඩා දක්ෂයි ls -d */
.
1.
අවකාශයන් ඇති බව ෆෝල්ඩර නම් සමඟ කටයුතු කරන විට විකල්පය ප්රධාන වේදනාව හේතු වනු ඇත.
මම භාවිතා කරන්නේ:
ls -d */ | cut -f1 -d'/'
මෙය පසුගාමී කප්පාදුවක් නොමැතිව තනි තීරුවක් නිර්මාණය කරයි - ස්ක්රිප්ට් සඳහා ප්රයෝජනවත් වේ.
මගේ ශත දෙක.
-1
විකල්පය ls
තනි තීරු ආකෘතියෙන් මෙන්ම ප්රතිදානය කරයි ls -1 -d */
.
-1
සෑම ප්රවේශයක් සඳහාම තවමත් කප්පාදුවක් ලබා දෙන බව සැලකිල්ලට ගත යුතුය .
.bashrc
අන්වර්ථයක් ලෙස එකතු කළ විට, මා එකතු කරන්නේ කෙසේද '/'
?
'\/'
| sed -e 's-/$--'
උප ෆෝල්ඩර නොමැති සියලුම ෆෝල්ඩර සඳහා :
find /home/alice/Documents -maxdepth 1 -type d
උප ෆෝල්ඩර සහිත සියලුම ෆෝල්ඩර සඳහා :
find /home/alice/Documents -type d
find /home/alice/Documents -maxdepth 1 -mindepth 1 -type d
එසේ නොමැතිනම් ඔබම ඇතුළත් /home/alice/Documents
වේ. නාමාවලි වලට සිම්ලින්ක් ඇතුළත් කිරීමට, උපසර්ගය-L
ක ලැයිස්තුගත ෙනොකළ තරු ලකුණ *
ෂෙල් විසින් රටාවක් (glob) ලෙස අර්ථ කරනු ඇත.
කවචය එය මාර්ග නාම ප්රසාරනයේදී භාවිතා කරයි.
ඉන්පසු එය රටාවට ගැලපෙන ගොනු නාම ලැයිස්තුවක් ජනනය කරනු ඇත.
සරල තරු ලකුණක් PWD හි ඇති සියලුම ගොනු නාමයන්ට ගැලපේ (වර්තමාන වැඩ කරන නාමාවලිය). අවසන් වන සියලුම ගොනු නාමයන්ට ගැලපෙන
පරිදි වඩාත් සංකීර්ණ රටාවක් . මේ අනුව, සියලුම නාමාවලි. විධානය:*/
/
echo */
echo ./*/ ### avoid misinterpreting filenames like "-e dir"
echo
පීඩබ්ලිව්ඩී හි සියලුම නාමාවලි වලට (කවචයෙන් ) පුළුල් කරනු ඇත .
මෙය පරීක්ෂා කිරීම සඳහා: mkdir
test-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 */
කෙසේ වෙතත්, මෙම විධානය (තරමක්) අඩු විශ්වසනීය ය. ඉහත ලැයිස්තුගත කර ඇති අමුතු නම් කළ ගොනු සමඟ එය අසාර්ථක වනු ඇත. එය නම් කිහිපයකින් යටපත් වේ. ගැටළු ඇති අය සොයා ගන්නා තෙක් ඔබ එකින් එක මකා දැමිය යුතුය.
GNU ls
විසින් "විකල්පවල අවසානය" ( --
) යතුර පිළිගනු ඇත .
ls -d ./*/ ### more reliable BSD ls
ls -d -- */ ### more reliable GNU ls
එක් එක් නාමාවලිය තමන්ගේම පේළියේ ලැයිස්තු ගත කිරීම සඳහා (එක් තීරුවක, 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
).අවසාන වශයෙන්, ශ්රිතයක් තුළ ඇති තර්ක ලැයිස්තුව භාවිතා කිරීම වර්තමාන ධාවන කවචයේ තර්ක ලැයිස්තුවට බලපාන්නේ නැත. සරලවම:
$ listdirs(){ set -- */; printf "%s\n" "${@%/}"; }
$ listdirs
මෙම ලැයිස්තුව ඉදිරිපත් කරයි:
--
-
*
cs
dir with spaces
draft
files
-h
masters
-n
static
-v var
අමුතු ගොනු නාම කිහිපයක් සමඟ මෙම විකල්ප ආරක්ෂිත වේ.
මෙම 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
මිනිසාගේ ගස සමඟ තවත් තර්ක දැකිය හැකිය
'Ls -d * /' වෙතින් ලැබෙන ප්රතිදානය ඔබට පසුපස කප්පාදු දෙකක් ලබා දෙන්නේ මන්දැයි ඔබ කල්පනා කරන්නේ නම් :
[prompt]$ ls -d */
app// cgi-bin// lib// pub//
සමහර විට ඔබේ කවචය හෝ සැසි වින්යාස ගොනු වෙනත් තැනක සිට ls විධානය -S ධජය ඇතුළත් ls අනුවාදයකට ගෙන යන නිසා විය හැකිය. එම ධජය එක් එක් ප්රතිදාන නාමයට අක්ෂරයක් එක් කරයි (එය සරල ගොනුවක් නොවේ) එය කුමන ආකාරයේද යන්න දක්වයි. එබැවින් එක් කප්පාදුවක් '* /' රටාවට ගැලපීම වන අතර අනෙක් කප්පාදුව එකතු කළ වර්ගයේ දර්ශකය වේ.
මෙම ගැටළුව මඟහරවා ගැනීම සඳහා, ඔබට ls සඳහා වෙනත් අන්වර්ථයක් අර්ථ දැක්විය හැකිය. කෙසේ වෙතත්, තාවකාලිකව අන්වර්ථය ඉල්ලා නොසිටීම සඳහා, ඔබට බැක්ස්ලෑෂ් සමඟ විධානය සකස් කළ හැකිය:
\ ls -d * /
මම මෙය මගේ .bashrc
ගොනුවට එක් කරමි (ඔබට එය එක් සැසියකට පමණක් අවශ්ය නම් / අවශ්ය නම් විධාන රේඛාවේ ටයිප් කළ හැකිය)
alias lsd='ls -ld */'
එවිට lsd අපේක්ෂිත ප්රති .ලය ලබා දෙනු ඇත.
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 '(?=/$)'
සැඟවුණු නාමාවලිය ලැයිස්තුගත කිරීමට අවශ්ය නොවේ නම්, මම ඉදිරිපත් කරන්නේ:
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
කරුණාකර මෙම පිළිතුර
නැතිව ෆෝල්ඩර ලැයිස්තු පෙන්වීමට /
ls -d */|sed 's|[/]||g'
ls -d1 */ | tr -d "/"
මෙන්න මම භාවිතා කරන දේ
ls -d1 /Directory/Path/*;
ls -d1 /Directory/Path/*/
නාමාවලි පමණක් ලැයිස්තුගත කිරීම සඳහා :
ls -l | grep ^d
ගොනු පමණක් ලැයිස්තුගත කිරීම සඳහා :
ls -l | grep -v ^d
හෝ ඔබට පහත පරිදි කළ හැකිය: ls -ld * /
මෙය උත්සාහ කරන්න. එය සියලුම ලිනක්ස් ඩිස්ට්රෝස් සඳහා ක්රියා කරයි.
ls -ltr | grep drw
ls -l | grep '^d' | awk '{print $9}'
අයිතමය සමඟ නාමාවලියක් තිබේදැයි පරීක්ෂා කරන්න test -d
:
for i in $(ls); do test -d $i && echo $i ; done
*/
යනු වත්මන් නාමාවලියෙහි ඇති නාමාවලි වලට ගැලපෙන ගොනු නාම ගැලපුම් රටාවකි.
නාමාවලි පමණක් ලැයිස්තුගත කිරීමට, මම මෙම ශ්රිතයට කැමතියි:
# 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'
}
FYI, ඔබට සියලුම ලිපිගොනු බහු පේළියේ මුද්රණය කිරීමට අවශ්ය නම්, ඔබට ls -1
එක් එක් ගොනුව වෙනම පේළියකින් මුද්රණය කළ හැකිය . file1 file2 file3
නාමාවලි ලැයිස්තුගත කිරීම සඳහා එක්-ලයිනර් "මෙතැනින්"
ගොනු ගණන සමඟ.
for i in `ls -d */`; do g=`find ./$i -type f -print| wc -l`; echo "Directory $i contains $g files."; done
මම අර්ධ වශයෙන් විසඳුවේ:
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
හොඳයි, මෙය මට අඩු කරන්න, නගරාධිපති කොටස :)
එය සම්පූර්ණ රවුමක් බවට පත් කිරීම, සෑම ෆෝල්ඩරයකම මාර්ගය ලබා ගැනීම සඳහා, ඇල්බට්ගේ පිළිතුර මෙන්ම ගෝර්ඩන්ස් ද භාවිතා කර එය ප්රයෝජනවත් විය යුතුය.
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/
පර්ල් භාවිතා කිරීම:
ls | perl -nle 'print if -d;'
නාමාවලි නාම පමණක් ලැයිස්තුගත කිරීම සඳහා මා භාවිතා කරන්නේ මෙන්න:
ls -1d /some/folder/*/ | awk -F "/" "{print \$(NF-1)}"
මෙන්න ගස භාවිතා කරන විචලනයකි, එය නාමාවලි නාමයන් වෙනම රේඛාවලින් පමණක් ප්රතිදානය කරයි, ඔව් එය කැත නමුත් ඒයි, එය ක්රියා කරයි.
tree -d | grep -E '^[├|└]' | cut -d ' ' -f2
නැත්නම් අමුතුයි
tree -d | grep -E '^[├|└]' | awk '{print $2}'
කෙසේ වෙතත් මෙය බොහෝ විට වඩා හොඳ වන අතර /
පසු නාමාවලියෙහි නම රඳවා ගනු ඇත .
ls -l | grep "^d" | awk '{print $9}'
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
-d
.