chmod -x * -R kivéve könyvtár

Kezdőlap Fórumok Vegyes felvágott chmod -x * -R kivéve könyvtár

8 bejegyzés megtekintése - 11-18 / 18
  • Szerző
    Bejegyzés
  • #2070587
    uzsolt
    Felhasználó
      Balage_82 wrote:
      Megengedhető hosszúság  ???

      Szerinted a bash parancssora végtelen hosszú sorokat elbír? Tudod, azért nem árt tárolni memóriában, esetleg swapon, hogy fel tudja dolgozni. Legjobb tudomásom szerint a mem és a swap is véges a legtöbb rendszeren. Általában 32768 karakter szokott lenni (legalábbis eddigi rendszereimen ennyi volt).

      Szerk.: vagy ez nem pont így működik? A

      Code:
      for i in `seq 1 100000`;  do echo $i ; done

      gond nélkül lefutott  ???

      #2070588
      admin
      Adminisztrátor

        Na jó de a leghoszab könyvtár/fájlnevem sem hosszab 20 karakternél. Vagy a for ciklus egymás után fűzné az összeset?
        Egyszerre csak egy könyvtárral foglalkozik, szépen végigmegy a fájlokon, aztán következő könyvtár… repeat until  🙂

        Ha arra gondolsz, hogy hány sort írhat ki terminálra az a buffermérettel állítható. Bár a script csak annyit, ír ki, hogy sikerült/nem sikerült. És emlékeim szerint kb 200 soronként törli a buffert.

        #2070589
        uzsolt
        Felhasználó
          Balage_82 wrote:
          Ha arra gondolsz, hogy hány sort írhat ki terminálra

          Nem. Hanem arra, hogy a bash „kezébe” milyen hosszú sztring kerül, az nem lehet végtelen hosszú, mivel azt valahogy tárolni kell valamilyen változóban. Tehát a számítógépen se tudsz tetszőlegesen pontos (tizedesjegyek száma) számokkal számolni, mert azt is tárolni kell. Akármilyen kis memóriát foglal egy tizedesjegy, qrva sokszor qrva kicsi lehet qrva nagy, és előbb-utóbb eléred a tárolókapacitás végét. Itt is, valahogy fel kell dolgoznia a bash-nak, tehát a zárójelezés, idézőjel, Alt+7 karakterek, stb. helyére be kell írni a megfelelő dolgokat. Ahhoz, hogy ezt meg tudd tenni, kezelned kell valamilyen módon, ami memóriát igényel.

          És persze gondolom, nem a memória mérete miatt van ez harmincezres korlát (nehogy már egy parancs miatt fagyasszuk a gépet…), tehát több memmel rendelkező gépen nem lesz nagyobb ez a szám. És ezt, ha mondjuk minden fájlneved 10 karakter, akkor kb. 3000 fájl a korlát (persze nem számítottuk, hogy a find elérési utat is ad, ha kell, szóval akár néhány százra is lecsökkenhet, ami akár gyakori méret is lehet).

          #2070590
          admin
          Adminisztrátor

            Kezdem elveszteni a fonalat…  🙂

            Code:
              for filename in `find „$1” -type f -print | sed ‘s/ /===/g’`;do
              filename=`echo $filename | sed ‘s/===/ /g’`
              chmod 644 „$filename” 2>/dev/null

            1. a find csak fájl nevekkel tér vissza, részleges elérési útvonallal révén paraméterként megadod induláskor hogy mely könyvtárra alkalmazza (leggyakrabban .), amelyben a sed lecseréli a szóközöket (olyan karakterre ami tuti nincs fájlnévben)
            2. filename változóban eltárolja a fájl útvonalat, amibe visszacseréljük a szóközöket
            3. chmod megkapja paraméterként a változó értékét
            4. ugyanezt ismétli könyvtárra is

            Ha jól értem amire gondolsz, akkor lehetne gond, ha teljes elérési útvonallal dolgozna, és ráadásul piszoksok alkönyvtáram lenne, mert akkor tényleg az átadot elérési útvonal nagyon hosszú lenne.

            #2070591
            uzsolt
            Felhasználó

              Még mindig nem. Szerinted hogy működik konkrétan a for? Mármint ebben az esetben?
              Lefut a find (ami igenis beadja az elérési útvonalat, csak add ki, de ez tökmindegy), az Alt+7-es karakterek (`, nemtom, mi a neve) miatt. Ezután az Alt+7-ek közé kerül a find kimenete (persze az Alt+7-ek eltűnnek). Ezután a for azt csinálja, hogy az in és a do közötti részen végigmegy egyesével (szóköz, TAB, újsor meg lehet, hogy még néhány karakter a „mezőelválasztó”) és a do és a done közötti részt végrehajtja (persze a ciklusváltozónak mindig megadja a megfelelő értéket). Ha nem hiszed, akkor próbáld ki:

              Code:
              for i in alma körte szilva; do echo $i; done

              Tehát a find stdout-os kimenete (sed-del megbolondítva, de ez nem számít) lesz most az alma körte szilva. Namost ha az alma körte szilva túl hosszú (mondjuk a bash csak legfeljebb 10 karakter hosszú parancsokat bír kezelni), akkor van a baj, hiszen a bash-nak kell az egészet feldolgoznia (olyan „külső” parancs, hogy for, nincs, tehát maga a bash kezeli), és ha több az alma körte szilva és a parancs többi része, mint egy megadott karakterszám (mondjuk a 10), akkor nem az történik, aminek történnie kellene.

              Amúgy világos, hogy működik a szkripted (legalábbis a részlet, amit közöltél), nem kell elmagyarázni 😉

              #2070592
              pointux
              Felhasználó

                „Azért nem teljesen hiábavaló a szkript, hiszen a számok átírásával lehetővé válik az, hogy a fájlok és a könyvtárak jogait különbözőre beállítani rekurzívan.

                Még csak kötözködésképpen: a for ciklus nem egész jó erre, mert mi van, ha qrva sok fájl/könyvtár van, és túllépi a megengedhető hosszúságot? Ezért lehetne mondjuk xargs-ot használni… És ekkor lehet, hogy a szóközök kezelése se kellene a sed-del.”
                Megind csak olvasni kell…. man find;

                find konyvtar -type d/f -exec chmod parameterek {} ;

                konyvtar – ‘.’ helyi, vagy más
                d/f – d könyvtár, f file
                paraméterek – chmod paraméterei
                {} – itt adja meg a find a saját kimenetét

                Ez a legtökéletesebb megoldás (mert a find egyszer hajtódik végre, külső file-t stb. nem használ), kiv., ha maga a „find” tartalmazná a chmod binárist…

                #2070593
                uzsolt
                Felhasználó

                  Ott a pont! Igaz, annyira nem sűrűn használom a find-ot erre a célra, általában jók szoktak lenni a jogaim. De most tényleg beugrott, hogy van ilyen lehetőség, sőt az xargs manual hivatkozik a find-ra is…

                  #1884111
                  csaba
                  Felhasználó

                    Helló!

                    A fent említett dologra volnék kíváncsi. Értsd: Szeretném a fileokat futtathatatlanná tenni ade a könyvtárakban a navigációt is biztosítani kellene. Hogyan lehetene ezt?

                  8 bejegyzés megtekintése - 11-18 / 18
                  • Be kell jelentkezni a hozzászóláshoz.