Re: shell skripta ne radi

Poslao v-v on 23.09.2008 12:23:40
Ispričavam se, mala greškica (tr -cs je pisalo umjesto tr -c) je bila zbog čega je više nečitljivih znakova zamijenjivala sa jednim _ a ne više njih. Slijedeće je u redu:

find . -type f | while read I; do N=$( echo -n $I | tr -c 'a-zA-Z0-9./' '_' ); if [ "$I" != "$N" ]; then echo "$I -> $N"; mv "$I" "$N"; fi done;


No ajmo je onda sistematizirati:

#!/bin/bash
find . -type f | while read I; do 
	N=$( echo -n $I | tr -c 'a-zA-Z0-9./' '_' );
	if [ "$I" != "$N" ]; then
		echo "$I -> $N";
		mv "$I" "$N";
	fi
done;



i proći pojedine dijelove:


find . -type f | while read I; do
Traži fileove te loopa za svaki file. Filename je sadržan u I.

N=$( echo -n $I | tr -c 'a-zA-Z0-9./' '_' );
S echo puštamo početni filne name kroz tr -c koji zamjenjuje svaki znak koji ne matcha a-z A-Z 0-9 . ili / sa _. Echo ima -n parametar jer bi inače dodavao newline znak koji bi nam tr kasnije zamjenio sa _ pa bi nam svaki file imao dodatni _ na kraju, što ne želimo. Novi filename (sa izmijenjenim znakovima) spremamo u varijablu N.


if [ "$I" != "$N" ]; then
	echo "$I -> $N";
	mv "$I" "$N";
fi
Ukoliko početni i završni filename nisu isti (što znači da su imali neželjenih znakova unutra pa ih je gornji red zamjenio) ispišemo korisniku što i gdje renameamo te to učinimo.

Ova poruka je od: http://www.linux.hr/newbb/viewtopic.php?forum=8&topic_id=1889&post_id=11856