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