Kuidas kasutada kõigi valitud failidega käske, mis töötavad korraga ainult ühe failiga

Mitu korda peame käivitama skripti, et teisendada pdf tekstiks, teisendada .doc failid HTML-ks jne; Asi on selles, et need käsud aktsepteerivad korraga ainult ühte faili ja see on väga tüütu, kui peame sama faili tegema mitme failiga, eriti kui teeme skripti.

Pakun sellele probleemile lahenduse kasutades ls, janu, grep, awk y sh. Mida me teeme, on luua igale reale õige käsurida ja täita need sh-ga ning kuna sh täidab ühte rida korraga, siis rammimälu tarbimine ei suurene, mis muude meetodite korral võib isegi jõuallikaga masinaid külmutada.

Vaatame, kuidas seda käsujärjestust täita.

1- Esimene asi, mida peame tegema, on tutvustada faile, mida kasutatakse ls:

ls --directory /camino/a/carpeta/*.ext

2- Siis vajame neid faile hinnapakkumiste edastamiseks «/ tee / gruppi
faile«

ls --directory /camino/a/carpeta/*.ext | sed 's/^/"/' | sed 's/$/"/'

3- nüüd awk see on valmis andmeid vastu võtma.

ls --directory /camino/a/carpeta/*.ext | sed 's/^/"/' | sed 's/$/"/' | awk '{print $0}'

sest awk on oma keel, peame eraldama jutumärgid, mis tahame teksti tsiteerida, teiste funktsioonide hulgas \ Vaatame, kuidas mõned lahutada.
Eraldage pakkumine

\”

Näita väljundis tagasilööki (peame sisestama kolm riba)

\\\

Mõnikord vajame eraldavat eraldajat, väljundisse väljastatakse ainult tekst või jutumärgid, mis ilmuvad kahe tagasilöögi sees:

'""'\"\'""'

4- Vaatame, kuidas kõik käsuga loetletud failid ümber nimetada mv lihtsalt sufiksi sisestamiseks. (Nüüd peame faili loetlemiseks kasutama kombinatsiooni "$ 0" alati, kui peame seda kasutama)

ls --directory /camino/a/carpeta/*.ext | sed 's/^/"/' | sed 's/$/"/' | awk '{print "mv "$0" \"`dirname

"$ 0 ″" / Text-any-`basename "$ 0 ″" \ ""} '| sh

Märkus lisatakse lõppu, nagu on näidatud eelmises järjestuses, kombinatsioon « | sh »Mis suunab torujuhtme selle käsutõlgi juurde

Vaatame mõningaid skripti loomiseks ettevalmistatud näiteid.

Näited:

1- Teisendage kõik loetletud pdf-failid tekstifailideks.

ls --directory “$@” | sed 's/^/"/' | sed 's/$/"/' | awk '{print "pdftotext",$0}' | sh

Sellisel juhul ei ole vaja väljundfaili valida, kuna pdftotext genereerib baasnime ja .txt erandiga tekstifaili ainult siis, kui töötate ühe failiga.

2- Oletame, et tahame pildile efekti rakendada, kuid originaali muutmata, vaatame Windows XP logo jaoks hästi tuntud laineefektiga näidet, kuna tegemist on laineliste efektidega lipuga (selle efekti paremaks hindamiseks on soovitatav kasutada saadud pilt laiendiga .png).

ls --directory “$@” | sed 's/^/"/' | sed 's/$/"/' | awk '{print FS="convert -wave 25x150

"$0"","\"\`dirname "$0"`/`basename "$0" | sed '"'"s/\\\\.[[:alnum:]]*$//"'"'`-wave.`basename "$0" |
rev | awk -F . \'"'"'\{print $1}\'"'"'\ | rev`'""'\"\'""' "}' | sh

Märkus: selles järjekorras tehakse mitu läbimist:

  • Üks, et saada kataloogi, kus fail asub, katalooginimega
  • Teine baasnime saamiseks, kuid eemaldades nimetatud faili laienduse
  • Teine faili vabastuse saamiseks.

3- Vaatame nüüd, kuidas failirühma ümber nimetada, pannes vastava numbri nime ette (numbriline järelliide).

ls --directory “$@” | sed 's/^/"/' | sed 's/$/"/' | awk '{print FS="mv "$0" '""'\"\'""'`dirname
"$0"`/"FNR"-`basename "$0"`'""'\"\'""' "}' | sh

Numbri sisestamiseks kasutati sisemist awk-keelt suvandiga "FNR", mis loetleb iga väljundi rea, nii et numbri saab panna teksti ette või järele.

Vaatame, kuidas panna numbriline eesliide (panna number lõppu, kuid enne erandit) see valik kehtib ainult siis, kui failil on.

ls --directory “$@” | sed 's/^/"/' | sed 's/$/"/' | awk '{print FS="mv "$0" \"`dirname
"$0"`/`basename "$0" | sed '\'s/\\\\.[[:alnum:]]*$//\''`-"FNR".`echo "$0" | rev | awk -F .
'""'\'\'""'{print $1}'""'\'\'""' | rev `\" " }' | sh

4- Vaatame näidet, kus peame sisestama andmed või valima funktsioonide rühma, võttes näiteks juhtumi, kus eemaldame paroolikaitse mitmelt sama parooliga pdf-faililt. (Sel juhul kasutame dialoogiboksina zenity)

zenity --entry --hide-text --text "introduzca la clave de desbloqueo" > $HOME/.cat && ls
--directory “$@” | sed 's/^/"/' | sed 's/$/"/' | awk '{print FS="pdftk "$0" input_pw `cat
$HOME/.cat` output \"`dirname "$0"`/`basename "$0" .pdf`-unlock.pdf\" "}' | sh && rm
$HOME/.cat

Sõltuvalt zenity versioonist võib parooli valik olla lihtsalt –parool.

Nagu nägite, on eesmärk teha kass failist, mis luuakse rea alguses ainult üks kord ja seejärel teisendamise lõppedes see eemaldatakse.

5- Teine utiliit on see, kui peame lahti pakkima mitu .zip-failina tihendatud faili

ls --directory “$@” | sed 's/^/"/' | sed 's/$/"/' | awk '{print "unzip -x "$0" "}' | sh

Lisapakkumised tuleb eraldada tühikuga, kus kasutatakse valikut "$ 0".
näide
"unzip -x "$0" "

6- Vaatame näidet pdf-i kaitsmiseks parooliga, võimaldades lugeda, kuid kaitstud koopiate või muude suvandite eest (dialoogiboksis loetletud suvandid on need, mis on lubatud PDF-is, kui te ei soovi ühtegi neist lubada, ärge valige ükski).

zenity --separator " " --multiple --text "Seleccione los Opciones que quiere permitir" --column "Opciones" --list "Printing" "DegradedPrinting" "ModifyContents" "CopyContents" "ScreenReaders" "ModifyAnnotations" "AllFeatures" > $HOME/.cat && zenity --entry --hidetext --text "Teclee la contraseña de protección" > $HOME/.cat2 && ls --directory "$@" | sed 's/^/"/' | sed 's/$/"/' | awk '{print FS="echo \"pdftk \\\"`echo "$0"`\\\" output \\\"`dirname "$0"`/`basename "$0" .pdf`-locked.pdf\\\" allow `cat $HOME/.cat` owner_pw \"`cat $HOME/.cat2`\"\" | sh "}' | sh && rm $HOME/.cat $HOME/.cat2

Nende näidete abil on üsna näide sellest, kuidas seda võimalust kasutada mitme faili teisendamiseks, muutmiseks või ümbernimetamiseks ühe skriptiga, mitte neid käsitsi ükshaaval teisendades. Mälu tarbimine selle suvandiga on minimaalne, olenevalt kasutatavast käsust, kuna see ei teisenda neid korraga, vaid üksteise järel.

See valik võib olla väga kasulik, kui tahame terve rühma videoid teisendada mencoderiga ilma, et see neid üheks ühendaks; saate selleks ette valmistada skripti ja nad peaksid lihtsalt panema ls --directory %F | sed 's/^/"/' | sed 's/$/"/' | awk '{print "script-convertir-video "$0" "}' | sh && zenity --info --text "Todas las conversiones han terminado"

FIN


Jäta oma kommentaar

Sinu e-postiaadressi ei avaldata. Kohustuslikud väljad on tähistatud *

*

*

  1. Andmete eest vastutab: Miguel Ángel Gatón
  2. Andmete eesmärk: Rämpsposti kontrollimine, kommentaaride haldamine.
  3. Seadustamine: teie nõusolek
  4. Andmete edastamine: andmeid ei edastata kolmandatele isikutele, välja arvatud juriidilise kohustuse alusel.
  5. Andmete salvestamine: andmebaas, mida haldab Occentus Networks (EL)
  6. Õigused: igal ajal saate oma teavet piirata, taastada ja kustutada.

  1.   Ramiro DIJO

    Kas poleks palju, kuid PALJU lihtsam on seda kõike teha tavaväljendite või metamärkide abil? Ma ei saa aru, mis vahe on sellel ja muudate oma elu sellega nii keeruliseks.

  2.   kroto DIJO

    Tõde tahed, teil on suurepärased teadmised Linuxi käskudest. Väga kasulik!

    1.    KZKG ^ Gaara DIJO

      Jah, ma tean, et me õpime temaga siin ümbruses palju. Hahaha.

  3.   hexborg DIJO

    Ma arvan, et see on palju lihtsam:

    ls -d /path/to/folder/*.ext | faili lugemise ajal; tee käsk "$ file"; tehtud

    COMMANDi asemel võite panna kõik, mida soovite, ja see töötab isegi siis, kui failid sisaldavad tühje ruumi, kui panete $ faili jutumärkide vahele. Selleks pole vaja kasutada sed-i ega käske awk-ga genereerida. Ka see käivitab vähem protsesse.

    1.    Ankh DIJO

      o:
      i jaoks dollarites (ls -d /path/to/folder/*.ext); tee käsk “$ i”; tehtud;

      1.    hexborg DIJO

        See näeb hea välja, kuid kui failinimed sisaldavad toorikuid, siis see ei toimi. 🙂

        1.    tahed DIJO

          Tegelikult on hexborg sellepärast, et väljundtekst tsiteeritakse selle rea iga rea ​​alguses ja lõpus:
          ls-kataloog | sed 's / ^ / »/' | sed 's / $ / »/'

          Täpsustan, et leidu saab kasutada alamkataloogide otsimiseks.

          1.    hexborg DIJO

            Kuid minu trikiga ei pea te seda tegema. ls võtab failide täisnimed igale reale ühe ja loeb read rea kaupa ning jätab failinime failimuutujaks, olenemata sellest, kas sellel on tühje kohti või mitte. Käsus kasutades peate lihtsalt panema faili $ faili ümber jutumärgid.

          2.    Hugo DIJO

            Olen nõus, et leidmisel võib see olla vähem tülikas. Võtame selle näite artiklist:

            ls --directory “$@” | sed 's/^/"/' | sed 's/$/"/' | awk '{print "pdftotext",$0}' | sh

            Sama võiks saavutada niimoodi ja see töötab ilmselt kiiremini:

            find . -type f -print0 | xargs -0 pdftotext

            Nagu öeldud, on artikkel teretulnud, alati on hea õppida alternatiivsete viiside kohta midagi teha.

        2.    Ankh DIJO

          Kui märkate, et $ i on jutumärkides. See muudab tühimikust pääsemise tarbetuks.

          1.    hexborg DIJO

            Jah, kuid operaator $ () laiendab failinimesid jutumärke kuhugi panemata, nii et muutuja i püüab juba lõigatud failide nimed kinni. Proovige kataloogi terminalis, mille nimedes on tühikutega failid.

  4.   Lõvi DIJO

    Väga hea, keeruline, aga väga huvitav.

  5.   helena_ryuu DIJO

    see on hämmastav, suurepärane !!!!

  6.   MSX DIJO

    Suurepärane, GNU / Linuxi plastilisusel pole piire.

  7.   Natalia DIJO

    Hea blogija,

    Olen Natalia, Paperblogi kommunikatsioonijuht. Pärast selle avastamist võtan teiega ühendust, et kutsuda teid projekti Paperblog tundma, http://es.paperblog.com, uus kodanike ajakirjandusteenus. Paperblog on digitaalne platvorm, mis sarnaselt ajakirjaajakirjaga avaldab registreeritud blogide parimaid artikleid.

    Kui kontseptsioon teid huvitab, peate osalemiseks pakkuma ainult oma ajaveebi. Artiklite juurde tuleks lisada iga teie alguses / lõpus teie nimi / pseudonüüm ja profiilifail, samuti mitu linki algsele ajaveebile. Kõige huvitavamad saab meeskond valida esilehele ilmumiseks ja teid saab valida päeva autoriks.

    Loodan, et teid motiveerib projekt, mille alustasime sellise entusiasmiga 2010. aasta jaanuaris. Heitke pilk ja ärge kartke kirjutada mulle lisateabe saamiseks.

    Võta vastu südamlik ja südamlik tervitus,
    Natalia