Ask Your Question
2

Hromadné přejmenování souborů

asked 2014-12-03 13:26:25 +0100

syvotouf gravatar image

updated 2014-12-03 14:09:32 +0100

Někdo nějaký nápad na rozumné řešení této úlohy?

  • Ve webovém rozvrhu PS1, staženém v adresáři /home/courses/BIPS1/public/schedule, identifikujte soubory s rozvrhem cvičení. HTML soubory přejmenujte do tvaru ID-Dd-HHMM (např.: 303-Ut-1430.html).

Napadají mě pouze ne úplně hezká řešení. Díky za návrhy.

Pozn: Výpis ls -l dané složky vypadá takto


EDIT: Mé ohavné řešení zde

cd /home/courses/BIPS1/public/schedule; ls -l . | awk 'NR>1{print "mv",$9}' | tee puvodni | awk '{print $2}' |sed s/.html/$(date +"-%a-%H%M").html\;/ > novy; printf '#!/bin/bash\n' > script; paste -d" " puvodni novy >> script; chmod u+x script; ./script;

edit retag flag offensive close delete

Comments

Nezáleží to také na tom, jak vyadá obsah těch souborů?

Miro Hrončok ( 2014-12-03 15:34:33 +0100 )edit

1 Answer

Sort by » oldest newest most voted
0

answered 2014-12-03 13:43:20 +0100

Josef Kokeš gravatar image

updated 2014-12-03 15:12:19 +0100

Měl byste to zkusit sám, byť to třeba nebude elegantní nebo stoprocentně správné. Když si necháte poradit hned na začátku, tak se nenaučíte přemýšlet nad algoritmizací problému a až narazíte na jiný problém, zase nebudete vědět, kudy do něj. Když si naproti tomu napíšete svoje řešení, tak si z něj něco odnesete, i když nebude dokonalé (nebo i když bude více či méně chybné). Klidně ho můžete poslat jako otázku k vyhodnocení, nebo i soukromě mailem v rámci konzultace s vaším cvičícím.


Vaše řešení cd /home/courses/BIPS1/public/schedule; ls -l . | awk 'NR>1{print "mv",$9}' | tee puvodni | awk '{print $2}' |sed s/.html/$(date +"-%a-%H%M").html\;/ > novy; printf '#!/bin/bash\n' > script; paste -d" " puvodni novy >> script; chmod u+x script; ./script; je "ohavné" proto, že:

  1. Jste zvolil krajně nevhodný zdroj dat. Říkali jsme si, že ls je fajn pro interaktivní práci, ale pro získávání dat, která se mají dále zpracovávat, se nehodí. Pokud chcete získávat metainformace o souborech, tak se podívejte na příkaz stat, který vám mimo jiné dovolí výstup zformátovat podle vašich potřeb.

  2. Úplně jste zapoměl na možnost použít subshell (např. zpětné apostrofy).

  3. Zrovna tak jste zapoměl na možnosti cyklu (příkaz for). (Já v první odpovědi taky. :-))

Zkuste si to opravit na hezčí řešení, bude se vám to hodit pro získání praxe s použitými nástroji. Ale mějte na paměti, že řešíte něco jiného, než co po vás chce zadání: V zadání jde o to, že máte hromadu souborů, z nichž některé mají pro vás zajímavý obsah a jiné ne. Vy byste podle obsahu těch souborů měl vybrat ty zajímavé a opět podle obsahu jim přiřadit jména, která jsou více popisná než 1.html.

edit flag offensive delete publish link more

Comments

ad 2) subshell jsem použil, viz $(date +"-%a-%H%M"), ad 3) super nápad! V první chvíli mě nenapadlo že for se dá použít i na seznam souborů, jak jsem se dozvěděl později v man pages

syvotouf ( 2014-12-03 16:18:11 +0100 )edit

IMHO tady zatim moc nepadl zdroj pro dd-HHMM. Nejedná se o aktuální datum a čas (jak je použito zde v prbním nástřelu řešení)! Je to datum a čas daného cvika, který se najde v obsahu daného souboru.

VojtechMyslivec ( 2014-12-05 20:36:36 +0100 )edit

To je součást toho, že OP řeší jiný problém, než byl zadaný. Ale proč ne, ten jeho je také zajímavý a stojí za to si ho vyzkoušet.

Josef Kokeš ( 2014-12-05 20:45:39 +0100 )edit

Your answer

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!

Add answer

[hide preview]

Question tools

Follow
1 follower

Stats

Asked: 2014-12-03 13:26:25 +0100

Seen: 125 times

Last updated: Dec 03 '14