Sokszor le kell futtatnunk egy szkriptet, hogy egy pdf-t szöveggé alakítsunk, a .doc fájlokat html-be konvertáljunk stb. a lényeg az, hogy ezek a parancsok egyszerre csak egy fájlt fogadnak el, és ez nagyon unalmas számunkra, ha ugyanazt a feladatot több fájlnál kell végrehajtanunk, különösen akkor, ha szkriptet készítünk.
Javaslatot teszek erre a problémára ls, szomjúság, grep, awk y sh. Azt fogjuk tenni, hogy minden sorban létrehozzuk a helyes parancssort, és végrehajtjuk őket sh-vel, és mivel sh egyszerre egy sort hajt végre, a ram memória fogyasztása nem fog növekedni, ami más módszerekkel akár az alulteljesített gépeket is megfagyhatja.
Lássuk, hogyan kell végrehajtani ezt a parancssort.
1- Az első dolog, amit meg kell tennünk, be kell mutatnunk azokat a fájlokat, amelyeket át fogunk használni ls:
ls --directory /camino/a/carpeta/*.ext
2- Akkor szükségünk lesz ezekre a fájlokra az árajánlatok átadásához «/ útvonal / a csoportba
fájlokat«
ls --directory /camino/a/carpeta/*.ext | sed 's/^/"/' | sed 's/$/"/'
3- Most awk készen áll az adatok fogadására.
ls --directory /camino/a/carpeta/*.ext | sed 's/^/"/' | sed 's/$/"/' | awk '{print $0}'
mert awk megvan a saját nyelve, el kell választanunk azokat az idézőjeleket, amelyek megjelenni szeretnének egy szöveg idézésében, a többi funkció között. \ Lássuk, hogyan lehet elválasztani néhányat.
Válasszon külön ajánlatot
\”
Visszajelet mutat a kimenetben (három sávot kell beírnunk)
\\\
Időnként szükségünk lesz egy elválasztó elválasztóra, csak a két visszavágáson belül megjelenő szöveg vagy idézőjel jelenik meg a kimenetben:
'""'\"\'""'
4- Lássuk, hogyan nevezhetjük át az összes felsorolt fájlt a paranccsal mv csak egy utótag beírásához. (Most a fájl felsorolásához a "$ 0" kombinációt kell használnunk, amikor csak használnunk kell)
ls --directory /camino/a/carpeta/*.ext | sed 's/^/"/' | sed 's/$/"/' | awk '{print "mv "$0" \"`dirname
"$ 0 ″" / Text-any-`basename "$ 0 ″" \ ""} '| SH
Megjegyzés hozzáadódik a végéhez, az előző sorrendben látható módon a « | SH »Ami átirányítja a folyamatot erre a parancsértelmezőre
Nézzünk meg néhány példát, amelyek előkészültek egy szkript létrehozására.
Példák:
1- Konvertálja a szöveges fájlokban felsorolt összes pdf-t.
ls --directory “$@” | sed 's/^/"/' | sed 's/$/"/' | awk '{print "pdftotext",$0}' | sh
2- Tegyük fel, hogy egy képre szeretnénk effektust alkalmazni, de az eredeti módosítása nélkül lássunk egy példát a Windows XP logóhoz jól ismert hullámhatással, mivel hullámos effektusokkal rendelkező zászlóról van szó (ennek a hatásnak a jobb értékelése érdekében javasolt képként használni .png kiterjesztéssel).
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
Megjegyzés: ebben a sorrendben több átadás történik:
- Az egyik a dirname nevű mappához, ahol a fájl található
- Egy másik az alapnév megszerzéséhez, de az említett fájl kiterjesztésének eltávolítása
- Egy másik a fájl mentességének megszerzéséhez.
3- Most nézzük meg, hogyan lehet átnevezni egy fájlcsoportot úgy, hogy a megfelelő számot a név elé helyezzük (numerikus utótag).
ls --directory “$@” | sed 's/^/"/' | sed 's/$/"/' | awk '{print FS="mv "$0" '""'\"\'""'`dirname
"$0"`/"FNR"-`basename "$0"`'""'\"\'""' "}' | sh
Lássuk, hogyan lehet egy numerikus előtagot elhelyezni (tegyen egy számot a végére, de a mentesség elé) ez az opció csak akkor érvényes, ha a fájlnak van egy.
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- Lássunk egy példát, ahol adatokat kell megadnunk, vagy ki kell választanunk egy funkciócsoportot, példaként véve azt az esetet, amikor eltávolítjuk a jelszóvédelmet több, azonos jelszóval rendelkező pdf fájlból. (Ebben az esetben a zenity-t fogjuk használni párbeszédpanelként)
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
Amint látta, a cél egy macska készítése egy fájlból, amely csak egyszer jön létre a sor elején, majd az átalakítás befejeztével megszűnik.
5- Egy másik segédprogram, amikor több, .zip formátumban tömörített fájlt kell kicsomagolnunk
ls --directory “$@” | sed 's/^/"/' | sed 's/$/"/' | awk '{print "unzip -x "$0" "}' | sh
példa
"unzip -x "$0" "
6- Lássunk egy példát a pdf-nek az olvasást lehetővé tevő, de a másolás vagy más opciók nyomtatásával védett jelszavával történő védelmére (a párbeszédpanelen felsorolt opciók azok lesznek, amelyeket a pdf engedélyez, ha nem szeretne közülük ne válasszon egyet).
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
Ezekkel a példákkal jól példázza, hogyan lehet ezt az opciót felhasználni több fájl konvertálásához, módosításához vagy átnevezéséhez egyetlen szkript segítségével, és nem kézzel konvertálni őket egyesével. A memóriafogyasztás ezzel az opcióval minimális, a használt parancstól függően, mivel nem egyszerre, hanem egymás után konvertálja őket.
ls --directory %F | sed 's/^/"/' | sed 's/$/"/' | awk '{print "script-convertir-video "$0" "}' | sh && zenity --info --text "Todas las conversiones han terminado"
FIN
Nem lenne sok, de SOKKAL könnyebb mindezt elvégezni a reguláris kifejezések vagy a helyettesítő karakterek használatával? Nem értem, mi a különbség ennek és az életed ilyen bonyolulttá tétele között.
Az igazság meglepődött, nagy ismerete van a linux parancsokról. Nagyon hasznos!
Igen, tudom, hogy sokat fogunk tanulni vele itt hahaha.
Szerintem ez sokkal könnyebb:
ls -d /path/to/folder/*.ext | fájl olvasása közben; do COMMAND "$ file"; Kész
A COMMAND helyett bármit beírhat, amit csak akar, és akkor is működik, ha a fájlok üres tereket tartalmaznak, amíg a $ fájlt idézőjelek közé teszi. Ehhez nem kell sed használni, vagy az awk paranccsal generálni a parancsokat. Ez is kevesebb folyamatot indít el.
o:
i-re $ -ban (ls -d /path/a/folder/*.ext); tegye a „$ i” parancsot; Kész;
Ez jól néz ki, de ha a fájlnevek üreseket tartalmaznak, akkor nem működik. 🙂
Valójában a hexborg ezért idézi a kimeneti szöveget az egyes sorok elején és végén ezzel az opcióval:
ls –könyvtár | sed 's / ^ / »/' | sed 's / $ / »/'
Tisztázom, hogy a find felhasználható az alkönyvtárakban történő keresésre.
De az én trükkemmel nem kell. Az ls minden sorban egyenként felveszi a fájlok teljes nevét, és soronként olvassa a fájlokat, és a fájlnevet a fájlváltozóban hagyja, függetlenül attól, hogy van-e üres szóköz. Csak parancsokat használva idézőjeleket kell tennie a $ fájl köré.
Egyetértek azzal, hogy a megállapításban ez kevésbé nehézkes lehet. Vegyük ezt a példát a cikkből:
ls --directory “$@” | sed 's/^/"/' | sed 's/$/"/' | awk '{print "pdftotext",$0}' | sh
Ugyanezt el lehetne érni így, és valószínűleg gyorsabban fut:
find . -type f -print0 | xargs -0 pdftotext
Ennek ellenére a cikket örömmel fogadjuk, mindig jó megismerni a cselekvés alternatív módjait.
Ha észreveszi, hogy a $ i idézőjelben szerepel. Ez szükségtelenné teszi a szóköz elhagyását.
Igen, de a $ () operátor kibővíti a fájlneveket úgy, hogy idézőjeleket sehova nem tesz, így az i változó már elkapja a kivágott fájlok nevét. Próbálja ki egy könyvtár termináljában, amelynek fájljai szóközökkel rendelkeznek a nevekben.
Nagyon jó, összetett, de nagyon érdekes.
ez csodálatos, nagyszerű !!!!
Kiváló, a GNU / Linux plaszticitásának nincsenek korlátai.
Kedves blogger!
Natalia vagyok, a Paperblog kommunikációs menedzsere. Miután felfedeztem, kapcsolatba lépek Önnel, hogy meghívjam Önt a Paperblog projekt megismerésére, http://es.paperblog.com, egy új állampolgári újságírói szolgálat. A Paperblog egy olyan digitális platform, amely blogmagazinként a regisztrált blogok legjobb cikkeit teszi közzé.
Ha a koncepció érdekel, akkor csak a blogodra kell javaslatot tenni a részvételhez. A cikkeket az Ön neve / álneve és profilfájlja, valamint az eredeti blogra mutató számos link tartalmazza, mindegyik elején és végén. A legérdekesebbeket a csapat választhatja ki, hogy megjelennek a címlapon, és kiválaszthatja a nap szerzőjének.
Remélem, hogy motiválja Önt a projekt, amelyet 2010 januárjában olyan lelkesen kezdtünk. Vessen egy pillantást, és ne habozzon, írjon nekem további részletekért.
Fogadjon szívélyes és szeretetteljes üdvözletet,
Natalia