Si të përdorni komandat që punojnë vetëm me një skedar në të njëjtën kohë me të gjitha skedarët që zgjidhni

Shumë herë duhet të ekzekutojmë një skenar për të shndërruar një pdf në tekst, për të shndërruar skedarët .doc në html, etj; çështja është që këto komanda pranojnë vetëm një skedar në të njëjtën kohë dhe kjo është shumë e lodhshme nëse duhet të kryejmë të njëjtën detyrë në disa skedarë, veçanërisht kur bëjmë një skenar.

Unë propozoj një zgjidhje për këtë problem duke përdorur ls, etje, grep, i çuditshëm y sh. Ajo që ne do të bëjmë është të krijojmë vijën e saktë të komandës në secilën rresht dhe t'i ekzekutojmë ato me sh, dhe meqenëse sh do të ekzekutojë një rresht në të njëjtën kohë, konsumi i memorjes ram nuk do të rritet, gjë që me metodat e tjera madje mund të ngrijë makinat nën fuqinë.

Le të shohim se si ta kryejmë këtë sekuencë komande.

1- Gjëja e parë që duhet të bëjmë është të fusim skedarët që do të përdoren ls:

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

2- Atëherë do të na duhen këto skedarë për të kaluar thonjëza «/ shtegu / në grupin e
dosjet«

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

3- tani i çuditshëm do të jetë gati për të marrë të dhënat.

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

sepse i çuditshëm ka gjuhën e vet do të na duhet të ndajmë citatet që duam të shfaqemi për të cituar një tekst midis funksioneve të tjera që do të na duhet të përdorim vijën e prapme \ Le të shohim se si të veçojmë disa.
Ndani një kuotë

\”

Tregoni një prapaskenë në dalje (do të duhet të shtypim tre shirita)

\\\

Ndonjëherë do të na duhet një ndarës izolues, vetëm teksti ose thonjëzat që shfaqen brenda dy pasqyrave do të dalin në dalje:

'""'\"\'""'

4- Le të shohim se si të riemërtoni të gjitha skedarët që janë renditur duke përdorur komandën mv vetëm për të hyrë në një prapashtesë. (Tani për të renditur skedarin do të duhet të përdorim kombinimin "$ 0" sa herë që kemi nevojë ta përdorim atë)

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

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

Shënimi shtohet në fund siç tregohet në sekuencën e mëparshme kombinimi « | sh »I cili ridrejton tubacionin te ky interpretues i komandave

Le të shohim disa shembuj të përgatitur për të krijuar një skenar.

shembuj:

1- Shndërroni të gjitha pdf-të që renditen në skedarë teksti.

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

Në këtë rast nuk është e nevojshme të zgjidhni një skedar dalës pasi që pdftotext gjeneron automatikisht një skedar teksti me emrin bazë dhe përjashtimin .txt nëse dhe vetëm nëse jeni duke punuar me një skedar të vetëm.

2- Le të themi se duam të zbatojmë një efekt në një imazh, por pa modifikuar origjinalin, le të shohim një shembull me efektin e valës të njohur për logon e Windows XP, pasi që është një flamur me efekte të valëzuara (për të vlerësuar më mirë këtë efekt, rekomandohet të përdoret si imazhi që rezulton me shtesën .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

Shënim: disa pasime bëhen në këtë sekuencë:

  • Një për të marrë dosjen ku ndodhet skedari me dirname
  • Një tjetër për të marrë emrin bazë, por duke hequr shtrirjen e skedarit në fjalë
  • Një tjetër për të marrë përjashtimin e dosjes në fjalë.

3- Le të shohim tani se si të riemërtoni një grup skedarësh duke vendosur numrin përkatës përpara emrit (prapashtesa numerike).

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

Për të futur numrin, u përdor gjuha e brendshme e awk me opsionin "FNR" që rendit çdo rresht të prodhimit, kështu që numri mund të vendoset para ose pas tekstit.

Le të shohim se si të vendosim një prefiks numerik (vendos një numër në fund, por para përjashtimit) ky opsion është i vlefshëm vetëm nëse skedari ka një.

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- Le të shohim një shembull ku do të duhet të fusim të dhëna ose të zgjedhim një grup funksionesh, duke marrë si shembull rastin kur heqim mbrojtjen e fjalëkalimit nga disa skedarë pdf që kanë të njëjtin fjalëkalim. (Në këtë rast do të përdorim zenitetin si një kuti dialogu)

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

Në varësi të versionit të zenitetit, opsioni për fjalëkalimin mund të jetë thjesht - fjalëkalim.

Siç e patë, qëllimi është të krijoni një mace të një skedari që do të krijohet në fillim të rreshtit vetëm një herë dhe më pas do të fshihet sapo të përfundojë konvertimi.

5- Një mjet tjetër është, kur duhet të zbërthejmë disa skedarë të ngjeshur në .zip

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

Kuotat shtesë duhet të ndahen nga një hapësirë ​​ku përdoret opsioni "$ 0".
shembull
"unzip -x "$0" "

6- Le të shohim një shembull për të mbrojtur një pdf me një fjalëkalim, duke lejuar leximin, por të mbrojtur nga kopjimi i shtypjes ose opsione të tjera, (opsionet e renditura në kutinë e dialogut do të jenë ato që do të lejohen në pdf, nëse nuk doni të lejoni ndonjë prej tyre, mos zgjidhni asnjë).

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

Me këta shembuj është mjaft e ilustruar se si të përdoret ky opsion për të konvertuar, modifikuar ose riemërtuar disa skedarë me një skenar të vetëm dhe jo duke i shndërruar ato me dorë një nga një. Konsumi i kujtesës me këtë opsion është minimal, në varësi të komandës që po përdoret, pasi nuk i konverton ato në të njëjtën kohë, por njëra pas tjetrës.

Ky opsion mund të jetë shumë i dobishëm nëse duam të shndërrojmë një grup të tërë videosh me mencoder pa i bashkuar ato në një; ju mund të përgatisni një skenar për këtë dhe ata thjesht do të duhet të vendosin ls --directory %F | sed 's/^/"/' | sed 's/$/"/' | awk '{print "script-convertir-video "$0" "}' | sh && zenity --info --text "Todas las conversiones han terminado"

FIN


Lini komentin tuaj

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar me *

*

*

  1. Përgjegjës për të dhënat: Miguel Ángel Gatón
  2. Qëllimi i të dhënave: Kontrolloni SPAM, menaxhimin e komenteve.
  3. Legjitimimi: Pëlqimi juaj
  4. Komunikimi i të dhënave: Të dhënat nuk do t'u komunikohen palëve të treta përveç me detyrim ligjor.
  5. Ruajtja e të dhënave: Baza e të dhënave e organizuar nga Occentus Networks (BE)
  6. Të drejtat: Në çdo kohë mund të kufizoni, rikuperoni dhe fshini informacionin tuaj.

  1.   ramiro dijo

    A nuk do të ishte shumë, por SHUMCH më e lehtë për të bërë të gjitha këto duke përdorur shprehje të rregullta ose karta të egra? Unë nuk e kuptoj se cili është ndryshimi midis kësaj dhe duke e bërë jetën tënde kaq të komplikuar me këtë.

  2.   kroto dijo

    E vërteta theksohet, ju keni njohuri të mëdha për komandat linux. Shumë e dobishme!

    1.    KZKG ^ Gaara dijo

      Po, e di që do të mësojmë shumë me të këtu hahaha.

  3.   heksborg dijo

    Unë mendoj se kjo është shumë më e lehtë:

    ls -d /path/to/folder/*.ext | gjatë leximit të skedarit; bëj KOMANDON "skedarin $"; bërë

    Në vend të komandës ju mund të vendosni çfarë të doni dhe funksionon edhe nëse skedarët përmbajnë hapësira bosh për sa kohë që vendosni $ skedar midis thonjëzave. Ju nuk keni nevojë të përdorni sed për këtë ose të gjeneroni komandat me awk. Gjithashtu kjo fillon më pak procese.

    1.    Ankh dijo

      o:
      për i në $ (ls -d /path/a/folder/*.ext); bëni KOMANDA “$ i”; bërë;

      1.    heksborg dijo

        Kjo duket mirë, por nëse emrat e skedarëve përmbajnë boshllëqe nuk funksionon. 🙂

        1.    i shkrirë dijo

          Në fakt, hexborg është arsyeja pse teksti i daljes citohet në fillim dhe në fund për secilën rresht me këtë opsion:
          ls –drejtoria | sed 's / ^ / »/' | sed's / $ / »/ '

          Unë sqaroj se gjetja mund të përdoret për të kërkuar nëndrejtoritë.

          1.    heksborg dijo

            Por me hilen time nuk ke pse. ls nxjerr emrat e plotë të skedarëve një në secilën rresht dhe lexon lexon rresht për rresht dhe e lë emrin e skedarit në ndryshoren e skedarit nëse ka hapësira bosh apo jo. Thjesht duhet të vendosni kuotime rreth $ file kur e përdorni atë në komandë.

          2.    Hugo dijo

            Pajtohem se mund të jetë më pak e rëndë. Le të marrim këtë shembull nga artikulli:

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

            E njëjta gjë mund të arrihet si kjo, dhe ndoshta funksionon më shpejt:

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

            Thënë kjo, artikulli është i mirëpritur, është gjithmonë mirë të mësosh rreth mënyrave alternative për të bërë diçka.

        2.    Ankh dijo

          Nëse vini re se $ i është në thonjëza. Kjo e bën të panevojshme shpëtimin nga hapësira e bardhë.

          1.    heksborg dijo

            Po, por operatori $ () zgjeron emrat e skedarëve pa vendosur kuotime askund, kështu që variabla i tashmë kap emrat e skedarëve të prerë. Provojeni në një terminal në një direktori që ka skedarë me hapësira në emrat e tyre.

  4.   Luani dijo

    Shumë e mirë, komplekse, por shumë interesante.

  5.   helena_ryuu dijo

    kjo është e mahnitshme, e mrekullueshme !!!!

  6.   MSX dijo

    E shkëlqyeshme, plasticiteti i GNU / Linux nuk ka kufij.

  7.   Natalia dijo

    I dashur bloger,

    Unë jam Natalia, Menaxhere e Komunikimit në Paperblog. Pasi ta zbuloj, po kontaktoj me ju për t'ju ftuar të njihni projektin Paperblog, http://es.paperblog.com, një shërbim i ri i gazetarisë qytetare. Paperblog është një platformë dixhitale që, si një revistë blog, boton artikujt më të mirë të blogeve të regjistruara.

    Nëse koncepti ju intereson, duhet të propozoni vetëm blogun tuaj për të marrë pjesë. Artikujt do të shoqëroheshin nga emri / pseudonimi juaj dhe skedari i profilit, si dhe disa lidhje me blogun origjinal, në fillim dhe në fund të secilit. Më interesantet mund të zgjidhen nga ekipi për t'u paraqitur në Cover Cover dhe ju mund të zgjidheni si Autori i ditës.

    Shpresoj të motivoheni nga projekti që kemi filluar me kaq entuziazëm në janar 2010. Shikoni dhe mos ngurroni të më shkruani për më shumë detaje.

    Merrni një urim të përzemërt dhe të dashur,
    Natalia