Многу пати треба да извршиме скрипта за да претвориме 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
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
Ајде да видиме како да се стави нумерички префикс (ставете број на крајот, но пред изземањето) оваа опција е валидна само ако датотеката има.
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
Пример
"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 коментари, оставете ги вашите
Зарем не би било многу, но МНОГУ полесно да се направи сето ова со користење на редовни изрази или вајлд карти? Не разбирам каква е разликата помеѓу тоа и да се прави твојот живот толку комплициран со ова.
Вистината е вистинска, имате големо познавање на командите со линукс. Многу корисно!
Да, знам дека ќе научиме многу со него овде хахаха.
Мислам дека ова е многу полесно:
ls -d /path/to/folder/*.ext | додека читате датотека; направи КОМЕНДАР „$ датотека“; направено
Наместо КОМАНД, можете да ставите што сакате и да работи, дури и ако датотеките содржат празни места сè додека ставите $ датотека помеѓу наводниците. Не треба да користите sed за тоа или да ги генерирате командите со awk. Исто така, ова започнува помалку процеси.
o:
за i во $ (ls -d /path/a/folder/*.ext); направи ПОРАКА „$ i“; направено;
Тоа изгледа добро, но ако имињата на датотеките содржат празни места, тоа не работи. 🙂
Всушност, хексборг е зошто излезниот текст е цитиран на почетокот и на крајот за секоја линија со оваа опција:
ls –директориум | sed 's / ^ / »/' | sed / s / $ / »/ '
Појаснувам дека откритието може да се искористи за пребарување на поддиректориумите.
Но, со мојот трик не мораш. ls ги вади имињата на целосните датотеки по еден на секоја линија и чита чита по линија и го остава името на датотеката во променливата на датотеката без разлика дали има празни места или не. Вие само треба да ставите понуди околу $ датотеката кога ја користите во командата.
Се согласувам дека може да биде помалку незгодно. Да го земеме овој пример од статијата:
ls --directory “$@” | sed 's/^/"/' | sed 's/$/"/' | awk '{print "pdftotext",$0}' | sh
Истото може да се оствари вака, и веројатно ќе работи побрзо:
find . -type f -print0 | xargs -0 pdftotext
Со тоа, написот е добредојден, секогаш е добро да научите за алтернативни начини да направите нешто.
Ако забележите дека $ i е во наводници. Тоа го прави бегањето од белиот простор непотребно.
Да, но операторот $ () ги проширува имињата на датотеките без да става цитати насекаде, така што променливата i веќе ги фаќа имињата на исечените датотеки. Пробајте го во терминал во директориумот што има датотеки со празни места во имињата.
Многу добро, сложено, но многу интересно.
ова е неверојатно, одлично !!!!
Одлично, пластичноста на GNU / Linux нема ограничувања.
Драг блогер,
Јас сум Наталија, менаџер за комуникации во Paperblog. Откако го открив, стапувам во контакт со вас за да ве поканам да го знаете проектот Paperblog, http://es.paperblog.com, нова служба за граѓанско новинарство. Paperblog е дигитална платформа која, како списание за блогови, ги објавува најдобрите статии од регистрираните блогови.
Доколку концептот ве интересира, вие треба само да го предложите вашиот блог за учество. Написите ќе бидат придружени со вашето име / псевдоним и датотека за профил, како и неколку врски до оригиналниот блог, на почетокот и на крајот од секоја од нив. Најинтересните може да бидат избрани од тимот да се појават на Насловната страница и да бидете избрани за Автор на денот.
Се надевам дека ве мотивира проектот што го започнавме со таков ентузијазам во јануари 2010 година. Погледнете и слободно пишете ми за повеќе детали.
Добијте срдечен и приврзан поздрав,
Наталија