Како се користе команде које истовремено раде само са једном датотеком са свим датотекама које изаберете

Много пута морамо покренути скрипту за претварање пдф-а у текст, претварање .доц датотека у хтмл итд .; поента је у томе што ове команде прихватају само по једну датотеку и то је за нас врло заморно ако треба да извршимо исти задатак на више датотека, посебно када радимо скрипту.

Предлажем решење за овај проблем помоћу ls, жеђ, греп, авк y sh. Оно што ћемо урадити је да креирамо тачну командну линију у сваком реду и извршимо их са сх, а пошто ће сх извршавати једну по једну линију, потрошња рам меморије се неће повећавати, што другим методама може чак и замрзнути недовољно напајане машине.

Погледајмо како да изведемо ову секвенцу наредби.

1- Прво што морамо да урадимо је да представимо датотеке које ће се користити ls:

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

2- Тада ће нам требати ове датотеке за прослеђивање цитата «/ путања / до групе од
фајлови«

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

3- Сада авк биће спремно за пријем података.

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

Јер авк има свој језик мораћемо да раздвојимо наводнике за које желимо да се цитирају у тексту међу осталим функцијама требаћемо да користимо косу црту \ Да видимо како да раздвојимо неке.
Одвојите цитат

\”

Покажите косу црту у излазу (мораћемо да укуцамо три траке)

\\\

Понекад ће нам требати изолирајући сепаратор, само излаз или цитати који се појављују унутар две повратне косе црте биће излазни у излаз:

'""'\"\'""'

4- Погледајмо како да преименујемо све датотеке које су наведене помоћу команде mv само за унос суфикса. (Сада да бисмо навели датотеку мораћемо да користимо комбинацију „$ 0“ кад год је треба)

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

"$ 0 ″" / Тект-ани-`басенаме "$ 0 ″" \ ""} '| сх

Напомена се додаје на крају, као што је приказано у претходном низу комбинација « |. | сх »Који преусмерава цевовод на овај тумач наредби

Погледајмо неколико примера припремљених за стварање скрипте.

Примери:

1- Претворите све ПДФ датотеке које су наведене у текстуалне датотеке.

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

У овом случају није потребно одабрати излазну датотеку, јер пдфтотект аутоматски генерише текстуалну датотеку са основним именом и изузећем .ткт ако и само ако радите са једном датотеком.

2- Рецимо да желимо да применимо ефекат на слику, али без модификовања оригинала, погледајмо пример са таласним ефектом добро познатим по логотипу Виндовс КСП, јер је то застава са валовитим ефектима (да бисмо боље проценили овај ефекат, то је препоручује се као резултирајућа слика са наставком .пнг).

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

Напомена: неколико додавања се врши у овом низу:

  • Један за преузимање директоријума у ​​којем се датотека налази са дирнамеом
  • Још један за добијање основног имена, али уклањање наставка наведене датотеке
  • Још један за добијање изузећа од наведеног досијеа.

3- Погледајмо сада како преименовати групу датотека стављањем одговарајућег броја испред имена (нумерички суфикс).

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

За унос броја коришћен је интерни авк језик са опцијом „ФНР“ која наводи сваки ред излаза, тако да се број може ставити пре или после текста.

Погледајмо како ставити нумерички префикс (на крају ставити број, али пре изузећа) ова опција је важећа само ако датотека има.

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- Погледајмо пример где ћемо морати да унесемо податке или изаберемо групу функција, узимајући за пример случај када уклањамо заштиту лозинком са неколико пдф датотека које имају исту лозинку. (У овом случају ћемо користити зенитет као дијалошки оквир)

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

У зависности од верзије зенити, опција за лозинку може бити само –пасворд.

Као што сте видели, циљ је направити мачку од датотеке која ће бити створена на почетку реда само једном, а затим ће бити избрисана када се конверзија доврши.

5- Друга корисност је када морамо распаковати неколико датотека збијених у .зип

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

Додатни цитати морају бити одвојени размаком у коме се користи опција „$ 0“.
пример
"unzip -x "$0" "

6- Погледајмо пример заштите ПДФ-а лозинком, омогућавајући читање, али заштићен од копирања или других опција, (опције наведене у дијалошком оквиру биће оне које ће бити дозвољене у пдф-у, ако не желите да дозволите било који од њих, не изаберите ниједну).

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

У овим примерима је сасвим примерно како користити ову опцију за претварање, модификовање или преименовање неколико датотека помоћу једне скрипте, а не за ручно претварање једне по једне. Потрошња меморије са овом опцијом је минимална, у зависности од команде која се користи, јер их не конвертује истовремено већ једну за другом.

Ова опција може бити врло корисна ако желимо да конвертујемо целу групу видео записа помоћу менцодера, а да их овај не спаја у један; можете припремити скрипту за ово, а они би то једноставно морали да ставе ls --directory %F | sed 's/^/"/' | sed 's/$/"/' | awk '{print "script-convertir-video "$0" "}' | sh && zenity --info --text "Todas las conversiones han terminado"

Фин


Оставите свој коментар

Ваша емаил адреса неће бити објављена. Обавезна поља су означена са *

*

*

  1. За податке одговоран: Мигуел Ангел Гатон
  2. Сврха података: Контрола нежељене поште, управљање коментарима.
  3. Легитимација: Ваш пристанак
  4. Комуникација података: Подаци се неће преносити трећим лицима, осим по законској обавези.
  5. Похрана података: База података коју хостује Оццентус Нетворкс (ЕУ)
  6. Права: У било ком тренутку можете ограничити, опоравити и избрисати своје податке.

  1.   Рамиро дијо

    Не би ли било пуно, али МНОГО лакше све ово урадити помоћу регуларних израза или џокер знакова? Не разумем у чему је разлика између тога и тога што си тако закомпликовао свој живот.

  2.   црото дијо

    Истина тахед, имате велико знање о линук наредбама. Веома корисно!

    1.    КЗКГ ^ Гаара дијо

      Да, знам да ћемо са њим овде научити пуно тога хахаха.

  3.   Хекборг дијо

    Мислим да је ово много лакше:

    лс -д /патх/то/фолдер/*.ект | док чита датотеку; уради ЗАПОВЕДИ "$ датотека"; Готово

    Уместо ЦОММАНД можете ставити шта год желите и то функционише чак и ако датотеке садрже празне просторе све док ставите $ датотеку између наводника. За то не треба да користите сед или да генеришете команде са авк. Такође ово покреће мање процеса.

    1.    Анкх дијо

      o:
      за и у $ (лс -д /патх/а/фолдер/*.ект); изврши наредбу „$ и“; Готово;

      1.    Хекборг дијо

        То изгледа добро, али ако имена датотека садрже празнине, то не ради. 🙂

        1.    тахед дијо

          У ствари, хекборг је разлог зашто је излазни текст цитиран на почетку и на крају за сваки ред са овом опцијом:
          лс –директориј | сед 'с / ^ / »/' | сед 'с / $ / »/'

          Појашњавам да се финд може користити за претраживање поддиректоријума.

          1.    Хекборг дијо

            Али уз мој трик не мораш. лс узима пуна имена датотека по једно у сваком ретку и чита редове по ретку чита име и оставља име датотеке у променљивој датотеке без обзира да ли има празне просторе или не. Само требате ставити наводнике око $ датотеке када је користите у наредби.

          2.    Хуго дијо

            Слажем се да то може бити мање гломазно. Узмимо овај пример из чланка:

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

            Исто би се могло постићи овако, и вероватно ради брже:

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

            Упркос томе, чланак је добродошао, увек је добро научити о алтернативним начинима нечега.

        2.    Анкх дијо

          Ако приметите да је $ и у наводницима. То бежање празнина чини непотребним.

          1.    Хекборг дијо

            Да, али оператер $ () проширује имена датотека без стављања наводника било где, тако да променљива и већ хвата имена изрезаних датотека. Покушајте у терминалу у директоријуму који има датотеке са размацима у именима.

  4.   Лав дијо

    Врло добро, сложено, али врло занимљиво.

  5.   хелена_риуу дијо

    ово је невероватно, супер !!!!

  6.   МСКС дијо

    Одлично, пластичност ГНУ / Линука нема ограничења.

  7.   Наталија дијо

    Драги блогер,

    Ја сам Наталиа, менаџер за комуникације у Паперблог-у. Након што сам га открио, ступам у контакт са вама да вас позовем да упознате пројекат Паперблог, http://es.paperblog.com, нова служба за грађанско новинарство. Паперблог је дигитална платформа која попут блог часописа објављује најбоље чланке регистрованих блогова.

    Ако вас концепт занима, само морате да предложите свој блог за учешће. Чланци би били праћени вашим именом / псеудонимом и датотеком профила, као и неколико веза до оригиналног блога, на почетку и на крају сваког од њих. Тим може одабрати оне најзанимљивије да се појаве на насловној страници, а ви можете бити изабрани за аутора дана.

    Надам се да вас мотивише пројекат који смо започели с таквим ентузијазмом у јануару 2010. Погледајте и не оклевајте да ми пишете за више детаља.

    Примите срдачан и нежан поздрав,
    Наталија