Kā izmantot komandas, kas vienlaikus darbojas tikai ar vienu failu, ar visiem atlasītajiem failiem

Daudzas reizes mums ir jāpalaiž skripts, lai pārveidotu pdf tekstu, konvertētu .doc failus html utt. Lieta ir tāda, ka šīs komandas vienlaikus pieņem tikai vienu failu, un tas mums ir ļoti garlaicīgs, ja mums ir jāveic viens un tas pats uzdevums vairākiem failiem, it īpaši, ja mēs veicam skriptu.

Es piedāvāju risinājumu šai problēmai, izmantojot ls, slāpes, grep, awk y sh. Tas, ko mēs darīsim, ir izveidot pareizu komandrindu katrā rindā un izpildīt tās ar sh, un, tā kā sh izpildīs vienu rindu vienlaikus, aunu atmiņas patēriņš nepalielināsies, kas ar citām metodēm var pat iesaldēt nepietiekami jaudīgas mašīnas.

Apskatīsim, kā izpildīt šo komandu secību.

1- Pirmais, kas mums jādara, ir iepazīstināt ar failiem, kas tiks izmantoti ls:

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

2- Tad mums būs nepieciešami šie faili, lai nodotu pēdiņas «/ ceļš / uz grupas
failus«

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

3- Tagad awk tas būs gatavs datus saņemt.

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

jo awk ir sava valoda, mums būs jānošķir pēdiņas, kuras mēs vēlamies parādīties, lai citētu tekstu, starp citām funkcijām, kuras mums būs jāizmanto ar atpakaļ slīpsvītru \ Apskatīsim, kā dažus atdalīt.
Atdaliet citātu

\”

Parādiet atpakaļvērsto slīpsvītru izvadē (mums būs jāievada trīs joslas)

\\\

Dažreiz mums būs nepieciešams izolējošs atdalītājs, izvadā tiks izvadīts tikai teksts vai pēdiņas, kas parādās divās slīpsvītrās:

'""'\"\'""'

4- Apskatīsim, kā pārdēvēt visus failus, kas ir uzskaitīti, izmantojot komandu mv tikai, lai ievadītu sufiksu. (Tagad, lai uzskaitītu failu, mums būs jāizmanto kombinācija "$ 0" ikreiz, kad mums tas būs jāizmanto)

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

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

Piezīme tiek pievienota beigās, kā parādīts iepriekšējā secībā, kombinācija « | sh »Kas novirza cauruļvadu pie šī komandu tulka

Apskatīsim dažus piemērus, kas sagatavoti skripta izveidošanai.

Piemēri:

1- Konvertējiet visus uzskaitītos pdf failus teksta failos.

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

Šajā gadījumā nav nepieciešams izvēlēties izvades failu, jo pdftotext automātiski ģenerē teksta failu ar bāzes nosaukumu un .txt atbrīvojumu tikai tad, ja strādājat ar vienu failu.

2- Pieņemsim, ka mēs vēlamies attēlam piemērot efektu, bet nemainot oriģinālu, aplūkosim piemēru ar viļņu efektu, kas labi pazīstams ar Windows XP logotipu, jo tas ir karogs ar viļņainiem efektiem (lai labāk novērtētu šo efektu, tas ir ieteicams izmantot kā iegūto attēlu ar paplašinājumu .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

Piezīme. Šajā secībā tiek veiktas vairākas piespēles:

  • Viens, lai iegūtu mapi, kurā atrodas fails, ar dirname
  • Cits, lai iegūtu bāzes nosaukumu, bet noņemot minētā faila paplašinājumu
  • Vēl viens, lai iegūtu atbrīvojumu no minētās lietas.

3- Tagad redzēsim, kā pārdēvēt failu grupu, ievietojot atbilstošo skaitli nosaukuma priekšā (ciparu sufikss).

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

Lai ievadītu numuru, tika izmantota iekšējā awk valoda ar opciju "FNR", kas uzskaita katru izvades rindu, tāpēc numuru var ievietot pirms vai pēc teksta.

Apskatīsim, kā ievietot ciparu prefiksu (beigās ievietojiet skaitli, bet pirms atbrīvojuma) šī opcija ir derīga tikai tad, ja failā ir.

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- Apskatīsim piemēru, kur mums būs jāievada dati vai jāizvēlas funkciju grupa, ņemot par piemēru gadījumu, kad mēs noņemam paroles aizsardzību no vairākiem pdf failiem, kuriem ir viena un tā pati parole. (Šajā gadījumā mēs izmantosim zenity kā dialoglodziņu)

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

Atkarībā no zenity versijas paroles opcija var būt tikai –parole.

Kā redzējāt, mērķis ir izveidot kaķi no faila, kas tiks izveidots rindas sākumā tikai vienu reizi, un pēc tam tas tiks izdzēsts, kad konvertēšana būs pabeigta.

5- Vēl viena lietderība ir tāda, kad mums ir jāatsaiņo vairāki .zip failā saspiesti faili

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

Papildu pēdiņām jābūt atdalītām ar atstarpi, kurā tiek izmantota opcija "$ 0".
piemērs
"unzip -x "$0" "

6- Apskatīsim piemēru, kā aizsargāt pdf ar paroli, ļaujot lasīt, bet aizsargājot pret kopiju vai citu opciju drukāšanu (dialoglodziņā uzskaitītās opcijas būs tās, kuras būs atļautas pdf formātā, ja nevēlaties atļaut no tiem, neatlasiet nevienu).

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

Izmantojot šos piemērus, ir diezgan piemērs, kā izmantot šo opciju, lai konvertētu, pārveidotu vai pārdēvētu vairākus failus ar vienu skriptu un nekonvertētu tos pa vienam. Atmiņas patēriņš, izmantojot šo opciju, ir minimāls, atkarībā no izmantotās komandas, jo tā tos nepārvērš vienlaikus, bet pēc kārtas.

Šī opcija var būt ļoti noderīga, ja mēs vēlamies pārveidot visu videoklipu grupu ar mencoder, nepievienojot tos vienā; jūs varat tam sagatavot skriptu, un viņiem tas vienkārši būs jāievieto ls --directory %F | sed 's/^/"/' | sed 's/$/"/' | awk '{print "script-convertir-video "$0" "}' | sh && zenity --info --text "Todas las conversiones han terminado"

FIN


Raksta saturs atbilst mūsu principiem redakcijas ētika. Lai ziņotu par kļūdu, noklikšķiniet uz šeit.

15 komentāri, atstājiet savus

Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: Migels Ángels Gatóns
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.

  1.   Ramiro teica

    Vai tas nebūtu daudz, bet DAUDZ vieglāk to visu izdarīt, izmantojot parastās izteiksmes vai aizstājējzīmes? Es nesaprotu, kāda ir atšķirība starp to un tā padarīšanu jūsu dzīvē tik sarežģītu.

  2.   kroto teica

    Patiesība, tahed, jums ir lielas zināšanas par Linux komandām. Ļoti noderīgs!

    1.    KZKG ^ Gaara teica

      Jā, es zinu, ka mēs daudz uzzināsim kopā ar viņu šeit hahaha.

  3.   Hexborg teica

    Es domāju, ka tas ir daudz vieglāk:

    ls -d /path/to/folder/*.ext | lasot failu; do COMMAND "$ file"; izdarīts

    COMMAND vietā jūs varat ievietot visu, ko vēlaties, un tas darbojas pat tad, ja failos ir tukšas atstarpes, kamēr jūs ievietojat $ failu starp pēdiņām. Tam nav nepieciešams izmantot sed vai ģenerēt komandas ar awk. Arī tas palaiž mazāk procesu.

    1.    Ankh teica

      o:
      par i $ (ls -d /path/a/folder/*.ext); izpildīt komandu “$ i”; izdarīts;

      1.    Hexborg teica

        Tas izskatās labi, bet, ja failu nosaukumos ir tukšas vietas, tas nedarbojas. 🙂

        1.    tahed teica

          Faktiski hexborg ir iemesls, kāpēc izvades teksts tiek kotēts katras rindas sākumā un beigās ar šo opciju:
          ls –katalogs | sed 's / ^ / »/' | sed 's / $ / »/'

          Es paskaidroju, ka meklēšanu var izmantot apakškatalogos.

          1.    Hexborg teica

            Bet ar manu triku jums tas nav jādara. ls paņem pilnu failu nosaukumus pa vienai katrā rindā un izlasa lasījumus pa rindām un atstāj faila nosaukumu faila mainīgajā neatkarīgi no tā, vai tajā ir tukšas vietas. Lietojot to komandā, jums vienkārši jāievieto pēdiņas ap $ failu.

          2.    Hugo teica

            Es piekrītu, ka atradumā tas var būt mazāk apgrūtinošs. Ņemsim šo piemēru no raksta:

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

            To pašu varētu labi sasniegt šādi, un tas, iespējams, darbojas ātrāk:

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

            Tas nozīmē, ka raksts ir apsveicams, vienmēr ir labi uzzināt par alternatīviem veidiem, kā kaut ko darīt.

        2.    Ankh teica

          Ja pamanāt $ i ir pēdiņās. Tas padara izvairīšanos no tukšuma nevajadzīgu.

          1.    Hexborg teica

            Jā, bet operators $ () paplašina failu nosaukumus, nekur neliekot pēdiņas, tāpēc mainīgais i jau noķer izgriezto failu nosaukumus. Izmēģiniet to direktorijas terminālā, kura nosaukumos ir faili ar atstarpēm.

  4.   Lauva teica

    Ļoti labs, sarežģīts, bet ļoti interesants.

  5.   helena_ryuu teica

    tas ir pārsteidzoši, lieliski !!!!

  6.   MSX teica

    Lieliski, GNU / Linux plastiskumam nav robežu.

  7.   Natālija teica

    Cienījamais blogeris!

    Esmu Natālija, Paperblog komunikāciju vadītāja. Pēc tā atklāšanas es sazinos ar jums, lai aicinātu jūs iepazīt projektu Paperblog, http://es.paperblog.com, jauns pilsoņu žurnālistikas dienests. Paperblog ir digitāla platforma, kas, tāpat kā žurnālu žurnāls, publicē labākos reģistrēto emuāru rakstus.

    Ja koncepcija jūs interesē, jums jāpiedāvā tikai savs emuārs, lai piedalītos. Rakstiem būtu pievienots jūsu vārds / pseidonīms un profila fails, kā arī vairākas saites uz sākotnējo emuāru katra katra sākumā un beigās. Komanda var izvēlēties interesantākos, lai tie tiktu parādīti vāka lapā, un jūs varat izvēlēties kā dienas autoru.

    Es ceru, ka jūs motivē projekts, kuru mēs ar tik lielu entuziasmu sākām 2010. gada janvārī. Apskatiet un nevilcinieties rakstīt man, lai saņemtu sīkāku informāciju.

    Saņemiet sirsnīgu un sirsnīgu apsveikumu,
    Natālija