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

Многу пати треба да извршиме скрипта за да претвориме pdf во текст, да ги конвертираме .doc-датотеките во HTML, итн; поентата е дека овие команди прифаќаат само една датотека истовремено и тоа е многу мачно ако треба да ја извршиме истата задача на неколку датотеки, особено кога правиме скрипта.

Предлагам решение за овој проблем користејќи ls, жед, grep, незгодно y sh. Она што ќе го сториме е да создадеме точна командна линија во секој ред и да ги извршиме со sh, и бидејќи sh ќе изврши една линија одеднаш, потрошувачката на RAM меморија нема да се зголеми, што со други методи може дури и да ги замрзне машините со недоволна моќност.

Ајде да видиме како да се изврши оваа низа на команди.

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 ″" / Text-any-`basename "$ 0 ″" \ ""} '| Ш.

Забелешката е додадена на крајот како што е прикажано во претходната низа комбинацијата « | Ш. »Што го пренасочува гасоводот кон овој толкувач на команди

Ајде да видиме неколку примери подготвени за создавање скрипта.

Примери:

1- Претворете ги сите pdf што се наведени во датотеки со текст.

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

Во овој случај не е потребно да изберете излезна датотека бидејќи pdftotext автоматски генерира текстуална датотека со основното име и исклучок .txt ако и само ако работите со една датотека.

2- Да речеме дека сакаме да примениме ефект на слика, но без да ја модифицираме оригиналот, да видиме пример со бран-ефект добро познат по логото на Windows XP, бидејќи тоа е знаме со брановидни ефекти (за подобро да го цениме овој ефект, се препорачува да се користи како добиена слика со наставката .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

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

  • Еден да ја добие папката каде што се наоѓа датотеката со име на име
  • Друго да се добие основното име, но отстранување на продолжувањето на споменатата датотека
  • Друг за да се добие изземање на наведената датотека.

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

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

За да го внесете бројот, беше искористен внатрешниот јазик на awk со опцијата „FNR“ што ја наведува секоја линија на излез, па бројот може да се постави пред или по текстот.

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

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- Ајде да видиме пример каде ќе треба да внесеме податоци или да избереме група функции, земајќи го како пример случајот кога отстрануваме заштита од лозинка од неколку pdf-датотеки кои имаат иста лозинка. (Во овој случај ќе ја користиме житилноста како дијалог прозорец)

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- Друга алатка е, кога треба да декомпресираме неколку датотеки набиени во .zip

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

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

6- Ајде да видиме пример за заштита на pdf со лозинка, дозволувајќи читање, но заштитено од печатење копија или други опции, (опциите наведени во дијалог прозорецот ќе бидат оние што ќе бидат дозволени во pdf, ако не сакате да дозволите ниту еден од нив, не изберете ниту еден).

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"

FIN


Содржината на статијата се придржува до нашите принципи на уредничка етика. За да пријавите грешка, кликнете овде.

15 коментари, оставете ги вашите

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

Вашата е-маил адреса нема да бидат објавени. Задолжителни полиња се означени со *

*

*

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

  1.   Рамиро dijo

    Зарем не би било многу, но МНОГУ полесно да се направи сето ова со користење на редовни изрази или вајлд карти? Не разбирам каква е разликата помеѓу тоа и да се прави твојот живот толку комплициран со ова.

  2.   крото dijo

    Вистината е вистинска, имате големо познавање на командите со линукс. Многу корисно!

    1.    КЗКГ ^ Гаара dijo

      Да, знам дека ќе научиме многу со него овде хахаха.

  3.   хексборг dijo

    Мислам дека ова е многу полесно:

    ls -d /path/to/folder/*.ext | додека читате датотека; направи КОМЕНДАР „$ датотека“; направено

    Наместо КОМАНД, можете да ставите што сакате и да работи, дури и ако датотеките содржат празни места сè додека ставите $ датотека помеѓу наводниците. Не треба да користите sed за тоа или да ги генерирате командите со awk. Исто така, ова започнува помалку процеси.

    1.    Ankh dijo

      o:
      за i во $ (ls -d /path/a/folder/*.ext); направи ПОРАКА „$ i“; направено;

      1.    хексборг dijo

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

        1.    залепи dijo

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

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

          1.    хексборг dijo

            Но, со мојот трик не мораш. ls ги вади имињата на целосните датотеки по еден на секоја линија и чита чита по линија и го остава името на датотеката во променливата на датотеката без разлика дали има празни места или не. Вие само треба да ставите понуди околу $ датотеката кога ја користите во командата.

          2.    Хуго dijo

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

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

            Истото може да се оствари вака, и веројатно ќе работи побрзо:

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

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

        2.    Ankh dijo

          Ако забележите дека $ i е во наводници. Тоа го прави бегањето од белиот простор непотребно.

          1.    хексборг dijo

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

  4.   Лав dijo

    Многу добро, сложено, но многу интересно.

  5.   helena_ryuu dijo

    ова е неверојатно, одлично !!!!

  6.   MSX dijo

    Одлично, пластичноста на GNU / Linux нема ограничувања.

  7.   Наталија dijo

    Драг блогер,

    Јас сум Наталија, менаџер за комуникации во Paperblog. Откако го открив, стапувам во контакт со вас за да ве поканам да го знаете проектот Paperblog, http://es.paperblog.com, нова служба за граѓанско новинарство. Paperblog е дигитална платформа која, како списание за блогови, ги објавува најдобрите статии од регистрираните блогови.

    Доколку концептот ве интересира, вие треба само да го предложите вашиот блог за учество. Написите ќе бидат придружени со вашето име / псевдоним и датотека за профил, како и неколку врски до оригиналниот блог, на почетокот и на крајот од секоја од нив. Најинтересните може да бидат избрани од тимот да се појават на Насловната страница и да бидете избрани за Автор на денот.

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

    Добијте срдечен и приврзан поздрав,
    Наталија