Monta kertaa meidän on suoritettava komentosarja muuntamaan pdf tekstiksi, muuntamaan .doc-tiedostot HTML: ksi jne.; Asia on, että nämä komennot hyväksyvät vain yhden tiedoston kerrallaan, ja se on meille erittäin tylsiä, jos joudumme suorittamaan saman tehtävän useille tiedostoille, varsinkin kun teemme komentosarjan.
Ehdotan ratkaisua tähän ongelmaan käyttämällä ls, jano, grep, awk y sh. Teemme luomalla oikean komentorivin jokaiselle riville ja suorittamalla ne sh: llä, ja koska sh suorittaa yhden rivin kerrallaan, RAM-muistin kulutus ei kasva, mikä muilla menetelmillä voi jopa jäädyttää alitehokkaat koneet.
Katsotaanpa, kuinka tämä komentosarja suoritetaan.
1- Ensimmäinen asia, joka meidän on tehtävä, on esitellä tiedostot, joita käytetään ls:
ls --directory /camino/a/carpeta/*.ext
2- Sitten tarvitsemme näitä tiedostoja lainausten välittämiseen «/ polku / ryhmään
tiedostot«
ls --directory /camino/a/carpeta/*.ext | sed 's/^/"/' | sed 's/$/"/'
3- Nyt awk se on valmis vastaanottamaan tiedot.
ls --directory /camino/a/carpeta/*.ext | sed 's/^/"/' | sed 's/$/"/' | awk '{print $0}'
koska awk on oma kielensä, meidän on erotettava lainaukset, jotka haluamme ilmestyä lainaamaan tekstiä muiden toimintojen välillä, joita meidän on käytettävä kääntöviivaa \ Katsotaanpa, kuinka erottaa jotkut.
Erota tarjous
\”
Näytä taaksepäin vinoviiva (meidän on kirjoitettava kolme palkkia)
\\\
Joskus tarvitsemme eristävän erottimen, vain teksti tai lainausmerkit, jotka näkyvät kahden taaksepäin viivan sisällä:
'""'\"\'""'
4- Katsotaanpa, kuinka nimetä kaikki tiedostot, jotka on lueteltu komennolla mv vain syöttääksesi loppuliitteen. (Tiedoston luetteloimiseksi meidän on käytettävä yhdistelmää "$ 0" aina, kun meidän on käytettävä sitä)
ls --directory /camino/a/carpeta/*.ext | sed 's/^/"/' | sed 's/$/"/' | awk '{print "mv "$0" \"`dirname
"$ 0 ″" / Text-any-`basename "$ 0 ″" \ ""} '| sh
Huomautus lisätään loppuun, kuten edellisessä järjestyksessä on esitetty, yhdistelmä « | sh »Joka ohjaa putkiston tähän komentotulkkiin
Katsotaanpa joitain esimerkkejä, jotka on valmistettu käsikirjoituksen luomiseen.
esimerkkejä:
1- Muunna kaikki luetellut pdf-tiedostot tekstitiedostoiksi.
ls --directory “$@” | sed 's/^/"/' | sed 's/$/"/' | awk '{print "pdftotext",$0}' | sh
2- Oletetaan, että haluamme soveltaa kuvaan tehosteita, mutta muuttamatta alkuperäistä, katsotaanpa esimerkki Windows XP -logosta tunnetusta aaltovaikutuksesta, koska se on lippu, jolla on aaltoilevia vaikutuksia (tämän vaikutuksen arvostamiseksi on suositeltavaa käyttää tuloksena olevan kuvan laajennuksella .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
Huomaa: Tässä sarjassa tehdään useita läpäisyjä:
- Yksi hakemaan kansio, jossa tiedosto sijaitsee, ja dirname
- Toinen saada perusnimi, mutta poistamalla mainitun tiedoston laajennus
- Toinen saada vapautus mainitusta tiedostosta.
3- Katsotaan nyt, kuinka nimetä tiedostoryhmä uudelleen asettamalla vastaava numero nimen eteen (numeerinen jälkiliite).
ls --directory “$@” | sed 's/^/"/' | sed 's/$/"/' | awk '{print FS="mv "$0" '""'\"\'""'`dirname
"$0"`/"FNR"-`basename "$0"`'""'\"\'""' "}' | sh
Katsotaanpa, kuinka laitetaan numeerinen etuliite (laita numero loppuun, mutta ennen vapautusta) tämä vaihtoehto on voimassa vain, jos tiedostossa 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- Katsotaanpa esimerkki, jossa meidän on syötettävä tietoja tai valittava toimintaryhmä, ottaen esimerkkinä tapaus, jossa poistamme salasanasuojauksen useista pdf-tiedostoista, joilla on sama salasana. (Tässä tapauksessa käytämme zenityä valintaikkunana)
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
Kuten näitte, tavoitteena on tehdä kissa tiedostosta, joka luodaan rivin alkuun vain kerran ja joka sitten poistetaan, kun muunnos on valmis.
5- Toinen apuohjelma on, kun meidän on purettava useita .zip-tiedostoon pakattuja tiedostoja
ls --directory “$@” | sed 's/^/"/' | sed 's/$/"/' | awk '{print "unzip -x "$0" "}' | sh
esimerkki
"unzip -x "$0" "
6- Katsotaanpa esimerkki PDF-tiedoston suojaamisesta salasanalla, joka sallii lukemisen, mutta suojaa kopiointia tai muita vaihtoehtoja vastaan (valintaikkunassa luetellut vaihtoehdot ovat ne, jotka sallitaan pdf-tiedostossa, jos et halua sallia mitään niistä, älä Älä valitse mitään).
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
Näillä esimerkeillä on varsin esimerkki siitä, kuinka tätä vaihtoehtoa käytetään useiden tiedostojen muuntamiseen, muokkaamiseen tai uudelleennimeämiseen yhdellä komentosarjalla ja muuntamatta niitä käsin yksi kerrallaan. Muistin kulutus tällä vaihtoehdolla on minimaalinen käytetystä komennosta riippuen, koska se ei muunna niitä samanaikaisesti vaan peräkkäin.
ls --directory %F | sed 's/^/"/' | sed 's/$/"/' | awk '{print "script-convertir-video "$0" "}' | sh && zenity --info --text "Todas las conversiones han terminado"
FIN
Eikö se olisi paljon, mutta PALJON helpompaa tehdä tämä kaikki käyttämällä säännöllisiä lausekkeita tai jokerimerkkejä? En ymmärrä, mikä on ero sen välillä, että teet elämästäsi niin monimutkaista.
Totuus tahed, sinulla on paljon tietoa linux-komennoista. Todella hyödyllinen!
Kyllä, tiedän, että opimme paljon hänen kanssaan täältä hahaha.
Mielestäni tämä on paljon helpompaa:
ls -d /path/to/folder/*.ext | luettaessa tiedostoa; tee COMMAND "$ tiedosto"; tehty
COMMAND-vaihtoehdon sijaan voit laittaa mitä haluat, ja se toimii, vaikka tiedostot sisältävät tyhjiä välilyöntejä, kunhan $-tiedosto laitetaan lainausmerkkien väliin. Sinun ei tarvitse käyttää sediä siihen tai luoda komentoja awk: llä. Myös tämä käynnistää vähemmän prosesseja.
o:
i: lle luvussa $ (ls -d /path/a/folder/*.ext); tee komento “$ i”; tehty;
Se näyttää hyvältä, mutta jos tiedostonimet sisältävät tyhjiä kohtia, se ei toimi. 🙂
Itse asiassa hexborg on, miksi lähtöteksti lainataan alussa ja lopussa jokaiselle riville tällä vaihtoehdolla:
ls -hakemisto | sed 's / ^ / »/' | sed 's / $ / »/'
Selvennän, että hakua voidaan käyttää hakemiseen alihakemistoista.
Mutta minun temppuni kanssa sinun ei tarvitse. Ls ottaa tiedostojen täydelliset nimet yksi kullekin riville ja lukee lukee rivi riviltä ja jättää tiedostonimen tiedostomuuttujaan riippumatta siitä, onko siinä tyhjiä välilyöntejä. Sinun tarvitsee vain laittaa lainausmerkit $ -tiedoston ympärille, kun käytät sitä komennossa.
Olen samaa mieltä siitä, että se voi olla vähemmän hankala. Otetaan tämä esimerkki artikkelista:
ls --directory “$@” | sed 's/^/"/' | sed 's/$/"/' | awk '{print "pdftotext",$0}' | sh
Sama voidaan saavuttaa näin, ja se todennäköisesti toimii nopeammin:
find . -type f -print0 | xargs -0 pdftotext
Artikkeli on kuitenkin tervetullut, on aina hyvä oppia vaihtoehtoisista tavoista tehdä jotain.
Jos huomaat, että $ i on lainausmerkeissä. Tämä tekee tyhjätilan tyhjentämisestä tarpeetonta.
Kyllä, mutta $ () -operaattori laajentaa tiedostojen nimiä laittamatta lainausmerkkejä mihin tahansa, joten muuttuja i saa kiinni leikattujen tiedostojen nimet. Kokeile sitä hakemiston päätelaitteessa, jonka nimissä on tiedostoja, joissa on välilyöntejä.
Erittäin hyvä, monimutkainen, mutta erittäin mielenkiintoinen.
tämä on hämmästyttävää, hieno !!!!
Erinomainen, GNU / Linuxin plastisuudella ei ole rajoja.
Hyvä bloggaaja,
Olen Natalia, Paperblogin viestintäpäällikkö. Kun olen löytänyt sen, otan sinuun yhteyttä kutsua sinut tuntemaan Paperblog-projektin, http://es.paperblog.com, uusi kansalaisten journalismin palvelu. Paperblog on digitaalinen foorumi, joka julkaisee, kuten blogilehti, rekisteröityjen blogien parhaat artikkelit.
Jos konsepti kiinnostaa sinua, sinun tarvitsee vain ehdottaa blogiisi osallistumista. Artikkelien mukana olisi nimesi / salanimesi ja profiilitiedostosi sekä useita linkkejä alkuperäiseen blogiin jokaisen alussa ja lopussa. Tiimi voi valita mielenkiintoisimmat näkymään kansilehdellä ja sinut voidaan valita päivän kirjoittajaksi.
Toivon, että sinut motivoi projekti, jonka aloitimme niin innostuneesti tammikuussa 2010. Katso ja älä epäröi kirjoittaa minulle lisätietoja.
Vastaanota sydämellinen ja hellä tervehdys
Natalia