Bəşdə ls istifadə edərək yalnız siyahıları göstərin: imtahan

Bu əmr cari ls -d */ siyahıya alır: ls -d */

*/ Model nəyi dəqiq edir?

Və yuxarıdakı əmrdə (məsələn, ls -d /home/alice/Documents ) bu yolda yalnız siyahıların siyahısını göstərmək üçün mütləq yol verə bilərik?

776
16 янв. Sibi 16 yanvar təyin etdi 2013-01-16 09:07 '13 'da 9:07' da 2013-01-16 09:07
@ 25 cavab

*/ cari dizindəki bütün alt dizinlerle eşleşen bir şablon ( * bütün dosyalar ve alt dizinlerle eşleşecek / dizinlerde kısıtlıdır). Eynilə, / home / alice / Documents-deki bütün alt dizinleri ls -d /home/alice/Documents

825
16 янв. Gordon Devisson tərəfindən verilmiş cavab 16 yanvar 2013-01-16 09:11 '13 at 9:11 2013-01-16 09:11

Bunları etmək üçün dörd yol, hər biri fərqli bir çıxış formatı ilə.

1. echo istifadə

Məsələn: echo */ , echo *
Budur mənim var:

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

Və ya bir siyahısı kimi (ətraflı məlumat ilə): ls -dl */

border=0

3. lsgrep istifadə

Məsələn: ls -l | grep "^d" ls -l | grep "^d" ls -l | grep "^d" ls -l | grep "^d" Mənim var:

 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. Bash Script (boşluqları olan fayl adı üçün tövsiyə olunmur)

Məsələn: for я in $(ls -d */); do echo ${i%%/}; done for я in $(ls -d */); do echo ${i%%/}; done for я in $(ls -d */); do echo ${i%%/}; done for я in $(ls -d */); do echo ${i%%/}; done
İşdə budur:

 cs draft files hacks masters static 

Bitmə xarakterinin '/' xarakteri olmasını istəyirsinizsə, əmr olacaq: for я in $(ls -d */); do echo ${i}; done for я in $(ls -d */); do echo ${i}; done for я in $(ls -d */); do echo ${i}; done for я in $(ls -d */); do echo ${i}; done

 cs/ draft/ files/ hacks/ masters/ static/ 
411
09 июня '13 в 15:21 2013-06-09 15:21 Cavab Albert 09 iyun '13 'də saat 15: 21' də verildi

Mən istifadə edirəm:

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

Bu skript olmadan bir sütun yaradır - skriptlərdə faydalıdır.

Mənim iki qəpik.

78
27 февр. Tomas Altfatherə yaxşı cavab 27 fevral. 2014-02-27 18:19 '14 saat 18:19 2014-02-27 18:19

Alt qovluqları olmayan bütün qovluqlar üçün:

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

Alt qovluqları olan bütün qovluqlar üçün:

 find /home/alice/Documents -type d 
45
23 июля '14 в 11:30 2014-07-23 11:30 cavab 23 İyul, '14 'də saat 11: 30-da veriləcək

4 (daha çox) Etibarlı parametrlər.

Nişan asterisk * kabuk tərəfindən bir model (glob) olaraq şərh ediləcək.
Kabuk bu yolu genişləndirmək üçün istifadə edəcək.
Daha sonra modelə uyğun olan fayl adlarının siyahısı yaranacaq.
Sadə bir asterisk PWD (real iş kataloq) bütün fayl adları uyğun olacaq.
*/ Kimi daha mürəkkəb bir model, */ ilə bitən bütün fayl adlarıyla eşleşecektir.
Belə ki, bütün kataloqlar. Buna görə əmr:

1. yankı.

 echo */ echo . hətta tək adlanan fayllarla etibarlı olacaq: 

 ./--/ ./-/ . 

Ancaq bu əmr (bir qədər) daha az etibarlıdır. Yuxarıda göstərilən tək təkrarlanan fayllarla işləməyəcəkdir. Bir neçə adla boğacaq. Problemləri olanları tapana qədər bir-bir silmək lazımdır.

2.- ls

GNU ls seçim ( -- ) düyməsinin sonunu qəbul edir.

 ls -d . ### more reliable GNU ls 

3-Printf

Hər bir qovluğu sırasına yazmaq üçün (ls-1-ə oxşar bir sütunda) istifadə edin:

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

Və daha da yaxşıdır, finalı silə bilərik:

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

Təcrübə:

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

Hata:

  • yuxarıda göstərildiyi kimi, bəzi adlar ( ls -d */ ).
  • IFS dəyərinə təsir edəcək.
  • Adları boşluqlara və seksiylərə bölün (default IFS ).
  • adda hər bir yeni xətt yeni bir eko əmrinə başlayacaq.

4.- funksiyası

Nəhayət, bir funksiyanı içərisində argüman listesini istifadə edərək, hazırda çalışan qövsənin dəlil siyahısına təsir göstərməyəcəkdir. Yalnız:

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

bu siyahı təmsil edir:

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

Bu variantlar bir neçə növ fayl adı ilə təhlükəsizdir.

30
24 июля '15 в 9:02 2015-07-24 09:02 Cavab 24 iyul, 24 saat 9 : 02 -da istifadəçi tərəfindən verilir

tree əmri də burada çox faydalıdır. Varsayılan olaraq, bütün faylları və qovluqları tam dərinliyə keçirəcək, bəzi ascii simvolları kataloq ağacını göstərəcək.

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

Ancaq yalnız dizinləri, ascii ağacı və mövcud kataloqdan tam bir yol olmadan əldə etmək istəsən, bunu edə bilərsiniz:

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

Arqumentlər:

 -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. 

Və mütləq bir yola ehtiyacınız varsa, mövcud kataloqun tam yolunu göstərərək başlaya bilərsiniz:

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

Alt qovluqların sayını məhdudlaşdırmaq üçün, məsələn, -L level maksimum alt səviyyəli səviyyəni təyin edə bilərsiniz:

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

Əlavə arqumentlər insan ağacından görünə bilər .

15
16 июня '15 в 18:30 2015-06-16 18:30 Cavab Hamish Downer tərəfindən 16 iyun 16: 30-da saat 18: 30-da veriləcək

'Ls -d * /' dən çıxdığınız səbəbdən iki ardıcıl bant təmin edir, məsələn:

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

bu, yəqin ki, bir yerdə sizin kabuğunuzun və ya sessiyanın konfiqurasiya faylları -F bayrağını ehtiva ls versiyası üçün ls komandası üçün bir takma ad var. Bu bayraq, hər bir çıxış adına bir simvol əlavə edir (bunun sadə bir fayl deyil) olduğunu ifadə edir. Beləliklə, bir slash '* /' naxışına uyğun bir matçdır, digər slash isə əlavə olunan tipin göstəricisidir.

Bu problemdən xilas olmaq üçün əlbəttə ls üçün başqa bir takma ad təyin edə bilərsiniz. Bununla yanaşı, müvəqqəti adları müvəqqəti olaraq çağırmamaq üçün tersliklə bir əmr əlavə edə bilərsiniz:

\ ls -d * /

11
29 окт. Cavab gwideman verildi Oct 29 2016-10-29 02:05 '16 saat 02.05 'da 2016-10-29 02:05

Yalnız bu, mənim .bashrc faylına əlavə edəcəyəm (yalnız bir seans üçün ehtiyacınız varsa, onu əmr satırına da yaza bilərsiniz)

 alias lsd='ls -ld */' 

lsd istənilən nəticəni verəcəkdir.

9
03 июня '16 в 2:02 2016-06-03 02:02 Cavab qonaq qonaq tərəfindən 03 iyun '2' də 2:02 2016-06-03 02:02 'də verilir

Gizli kataloq siyahı üçün tələb edilmirsə, təklif edirəm:

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

Gizli qovluqları göstərməlisinizsə, istifadə edin:

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

Və ya

 find -maxdepth 1 -type d | awk -F"./" '{print $2}' 
7
29 авг. Cavab PHP Learner 29 avqustda verilir. 2015-08-29 13:21 '15 'də saat 13:21' də

qovluq siyahıları olmadan /

 ls -d */|sed 's|[/]||g' 
6
31 окт. cavab 31 okta verildi . 2014-10-31 07:07 '14 saat 07:07 2014-10-31 07:07

Yalnız kataloqları görüntüləmək üçün:

 ls -l | grep ^d 

yalnız faylları keçirmək üçün:

 ls -l | grep -v ^d 

ya da bunu edə bilərsiniz: ls -ld * /

6
13 авг. cavab Vijay Gawas 13 avqustda verilir . 2018-08-13 15:03 '18 'də 15:03' də 2018-08-13 15:03

Mən də istifadə edirəm

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

2
17 июля '14 в 0:04 2014-07-17 00:04 cavab BHG 17 iyul '14 'də veriləcək 0:04 2014-07-17 00:04

*/ - bu, cari dizindəki qovluqlara uyğun olan fayl adının matç nümunəsidir.

Yalnız kataloqları siyahıya salmaq üçün bu xüsusiyyətləri sevirəm:

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

Bunu sizin .bashrc saytınıza yerləşdirin.

İstifadə nümunələri:

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

Qeyd: -i seçimini istifadə etsəniz, pozulacaq. Bunun üçün düzeltme:

 # long list only directories llod () { ls -l --color=always "$@" | egrep --color=never '^d|^[[:digit:]]+ d' } 
2
25 марта '15 в 23:16 2015-03-25 23:16 Cavab Robin A. Meade tərəfindən 25 Mart 2015 tarixində saat 23:16 'də verilmişdir 2015-03-25 23:16

Bunu sınayın. bu bütün dağılımlarda işləyəcək -ltr | grep drw

1
23 июня '18 в 0:49 2018-06-23 00:49 Cavab Raj RD tərəfindən 23 İyun, '18 'də 0:49 ; 2018-06-23 00:49' də verilir

Hər bir qovluğa yol tapmaq üçün tam dairəni əlavə edərkən, Albertın yanı sıra Gordans'ın kombinasiyasından istifadə edin, bu olduqca faydalı olmalıdır.

 for i in $(ls -d /pathto/parent/folder ls ilə heç bir əlaqəsi yoxdur;  bu, qlobbing kimi tanınan bir prosesdə, kabuk / bash ilə həyata keçirilir. 

Buna görə də echo */ls -d */ eyni elementləri çıxardı. (The -d bayrağı ls -d adlarını yazdırmaq üçün səbəb olur, kataloqların məzmunu deyil.)

1
26 нояб. Cavab 26 noyabr axınıdır 2018-11-26 11:40 '18 saat 11:40 'da 2018-11-26 11:40

Mən qismən istifadə edərək qərar verdim:

 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 

Bəli, bələdiyyə başçısının bir hissəsini mənə verəcəkdir :)

1
09 мая '14 в 6:32 2014-05-09 06:32 Cavab 09.07.2014 tarixində saat 06:32 da inukaze verilir 2014-05-09 06:32

Yalnızca kataloq adlarını sıralamaq üçün istifadə etdiyim şey:

 ls -1d /some/folder 

İstədiyiniz və düzəldilməsini istəyirsinizmi?

 ls -1d ./*/ | cut -c 3- | rev | cut -c 2- | rev | sort 
0
10 дек. Cavab 10 dekabr PYK verilir. 2018-12-10 23:49 '18 də saat 11.49-da 2018-12-10 23:49
 file *|grep directory 

O / P (maşınımda) -

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

Yuxarıdakı çıxış kəsmə ilə aydınlaşdırıla bilər.

 file *|grep directory|cut -d':' -f1 mongo-example-master nostarch scriptzz splunk testdir * could be replaced with any path that permitted file - determine file type grep - searches for string named directory -d - to specify a field delimiter -f1 - denotes field 1 
0
05 окт. cavab 05 avqust AVS verilir . 2017-10-05 21:56 '17 da 21:56 2017-10-05 21:56

Baş haqqında suallar və ya sual