Қапшықтағы әрбір файл арқылы қалай өтуге болады?

Менің емтихан деп аталатын қалта бар. Бұл қалтада математика, физика және ағылшын тілдері деп аталатын 3 қалта бар. Барлық осы қалталарда кейбір ішкі қалталар мен файлдар бар. Мен әрбір қалта арқылы өтіп, файлдар деп аталатын басқа файлға әрбір қалта мен файлдың жолын басып шығарғым келеді. Мен мұны жасадым:

#!/bin/bash

LOC="/home/school/exam/*"

{
  for f in $LOC 
  do
   echo $f
  done
 } > "files"

Мен шығу:

/ home/school/емтихан/математика

/ үй/мектеп/емтихан/физика

/ home/school/емтихан/english

Мен кодты қалай жасауға болатындығын білмеймін және емтиханның ішкі қалталарына ұқсас нәрсені жасай алмаймын. Кез келген ұсыныстар?

PS Мен қабық сценарийлерінде жаңадан бастаймын.

1

5 жауаптар

find /home/school/exam -print > files
3
қосылды
Егер сіз өзіңіздің сұрағыңызды түсінсеңіз, тек емтихан директориясының бастамасымен жұмыс каталогы ретінде емтихан-іздестіру файлдары табыңыз. ~/exam пайдалану тек өздерінің үй каталогында емтихан каталогы бар адамдар үшін жұмыс істейді.
қосылды автор Michael Hoffman, көзі
бұл жұмыс жасайды. Бірақ қазір бұл туралы ойлаймын, мен бұл сценарийді команданың бір бөлігі ретінде жасаймын және командадағы барлық адамдар емтихан қалтасына басқа жолы бар, себебі ол жұмыс істейтін болады деп ойламаймын. Мұны қалай өзгертуге болады? Мен */exam -print файлдарын табуға тырыстым, бірақ мұндай файл немесе каталог жоқ дейді.
қосылды автор captain, көзі
Жарайды, оны ~/exam -print> файлдарға ауыстырдым және ол жұмыс істейді. Бірақ, әрине, емтихан қалтасына ие басқа компьютерлерде жұмыс істейтін болады ма?
қосылды автор captain, көзі
Олар емтихан директориясы бар. Менің ойымша, бұл жұмыс істейді. Мен оны мүмкіндігінше тез тексеремін. Жауаптарыңызға рахмет.
қосылды автор captain, көзі

globstar параметрімен bash екі іргелес жұлдыздарды қолданғанда, барлық файл атауларын ішкі каталогтарда қайтарады

пайдалану:

shopt -s globstar
for i in /home/school/exam/**

Бұл жерде сілтеме man bash :

globstar
                      If set, the pattern ** used in a pathname expansion context
                      will match all files and zero or more directories and
                      subdirectories.  If the pattern is followed by a /, only
                      directories and subdirectories match.

және info bash :

          *      Matches any string, including the null string.  When  the
                 globstar  shell  option  is  enabled,  and * is used in a
                 pathname expansion context, two adjacent  *s  used  as  a
                 single  pattern  will  match  all  files and zero or more
                 directories and subdirectories.  If followed by a /,  two
                 adjacent  *s  will match only directories and subdirecto‐
                 ries.
2
қосылды

Бұл туралы барлық файлдарыңызды рекурсивті түрде тізімдеуге болады.

for i in *; do ls -l $i ; done
1
қосылды

find пәрменін қолдануға болады, ол барлық файлдарды ала алады, содан кейін exec немесе xargs арқылы оларды бірдеңе жасауға болады.

0
қосылды

Көптеген * nix таратылымдарында қамтылған tree пәрменін пайдалануға болады. (Ubuntu - ерекше ерекшелік болса да, бірақ apt-get арқылы орнатуға болады)

LOC="/home/school/exam/"
tree -if $LOC > files
0
қосылды