Portál AbcLinuxu, 12. května 2025 11:22

Dotaz: Hromadne vytvoreni symlinku

12.2.2008 11:54 Pavel
Hromadne vytvoreni symlinku
Přečteno: 352×
Odpovědět | Admin
Ahoj, mam v adresari /home/ussitema/public_html cca 500 adresaru, napr "CARINSURANCE, WIRELESSCELLPHONE, WIRELESSHOMESECURITY" a pak take "loan, york", atp... No jde o to ze jsem narazil na jisty problem a potrebuji pro vsechny adresare, ktere maji v nazvu velka pismena vytvorit symlinky s malyma pisemenama, takze napr.
/home/ussitema/public_html/furnituretable -> /home/ussitema/public_html/FURNITURETABLE
No a jde o to ze rucne bych to delal hrozne dlouho, tak jestli by se na to nedal vytvorit nejaky jednoduchy scriptik?

Dekuji
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

12.2.2008 12:21 Jan Šimák | skóre: 37 | Hradec Králové
Rozbalit Rozbalit vše Re: Hromadne vytvoreni symlinku
Odpovědět | | Sbalit | Link | Blokovat | Admin
ln -s `ls | tr [A-Z] [a-z]` .
vytvoří symlinky v pracovním adresáři.
12.2.2008 12:28 Pavel
Rozbalit Rozbalit vše Re: Hromadne vytvoreni symlinku
Tak jsem to vyzkousel, ale to udela symlink spatne
[root@server2 test]# ln -s `ls | tr [A-Z] [a-z]` .
[root@server2 test]# ls
aaa  AAA  bb  ccc  CCC
[root@server2 test]# ls -l
total 12
lrwxrwxrwx  1 root root    3 Feb 12 05:25 aaa -> aaa
drwxr-xr-x  2 root root 4096 Feb 12 05:25 AAA
drwxr-xr-x  2 root root 4096 Feb 12 05:25 bb
lrwxrwxrwx  1 root root    3 Feb 12 05:25 ccc -> ccc
drwxr-xr-x  2 root root 4096 Feb 12 05:25 CCC
12.2.2008 12:49 Jan Šimák | skóre: 37 | Hradec Králové
Rozbalit Rozbalit vše Re: Hromadne vytvoreni symlinku
Pardon, měl jsem to více otestovat. Zkusím to opravit.
12.2.2008 13:37 Jan Šimák | skóre: 37 | Hradec Králové
Rozbalit Rozbalit vše Re: Hromadne vytvoreni symlinku
Toto už funguje:
#!/bin/bash

for i in *; do
	ln -s $i `echo $i | tr [A-Z] [a-z]`
done
Na jeden řádek to pak je:
for i in *; do ln -s $i `echo $i | tr [A-Z] [a-z]`; done
12.2.2008 13:46 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Hromadne vytvoreni symlinku
Ještě na tom trochu zapracujte. Přinejmenším byste měl ošetřit mezery v názvech a situaci, kdy jméno neobsahuje velká písmena, případně kdy se několik souborů liší jen velikostí písmen v názvu.
13.2.2008 15:59 Jan Šimák | skóre: 37 | Hradec Králové
Rozbalit Rozbalit vše Re: Hromadne vytvoreni symlinku
Děkuji za podnětné připomínky. Na scriptu jsem zapracoval a pokusil jsem se ho vylepšit.
#!/bin/bash
#set -x

for i in *; do
	if [[ -d "$i" && ! -L "$i" ]]; then
		lowercasedir=`echo "$i" | tr [A-Z] [a-z]`
		if [[ "$lowercasedir" != "$i" ]]; then
			if [[ ! -e "$lowercasedir" ]]; then
				ln -s "$i" "$lowercasedir"
			else
				dirinode=`ls -id "$i" | gawk '{print $1}'`
				if [[ ! -e "${lowercasedir}_${dirinode}" ]]; then
					ln -s "$i" "${lowercasedir}_${dirinode}"
				fi
			fi
		fi
	fi
done
12.2.2008 12:24 petr
Rozbalit Rozbalit vše Re: Hromadne vytvoreni symlinku
Odpovědět | | Sbalit | Link | Blokovat | Admin
Utilizuj programy find, ln a tr. U findu použij parametr -exec. Je to na jeden řádek.
12.2.2008 12:30 Pavel
Rozbalit Rozbalit vše Re: Hromadne vytvoreni symlinku
Nemohl bys prosim primo uvest priklad? Zatim se s Linuxem spise seznamuji, tak moc nevim jak na to. Mnohokrat dekuji
13.2.2008 16:48 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Hromadne vytvoreni symlinku
Odpovědět | | Sbalit | Link | Blokovat | Admin
Přesně na takový případ se mi VELICE osvědčilo generovat seznam příkazů ve vimu (raději gvimu). Je to pak práce s textem, nemusím vše ošetřovat, protože pro každý adresář mám jeden řádek, který snadno mohu odstranit/upravit, není to o univerzálně fungující smyčce. Stačí triviální příkazy a regulární výrazy. Mám tam undo, vidím, co to dělá. Vypsat seznam adresářů do souboru a pak už je to pár náhrad textů regexpem, blokového označení, převedení na malá písmena.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.