Strona 1 z 1

[+] Zmiana formatu licznika w skrypcie

: 26 lutego 2011, 17:07
autor: kodama
Witam.
Napisałem sobie taki tam prosty skrypt do zmiany nazwy plików (konkretnie obrazów jpg)

Kod: Zaznacz cały

#!/bin/sh

liczba=`ls -l *.jpg *.JPG | wc -l`
echo 'Plików w katalogu: '$liczba' '

echo -n "Podaj nową nazwę pliku: "
read po_zmianie
echo $po_zmianie


	for i in *
	do
	numer=$((numer+1))
 	roz=$(echo "$i" | sed 's/.*\.//')
	mv $i $po_zmianie"_$numer".$roz

done
Może nie jest najlepiej napisany jakby można było, ale zrobiłem jak umiałem. Jak widać, jest tam zwiększany licznik ($numer), w taki sposób, że każde kolejne zdjęcie ma nazwę np.:

Kod: Zaznacz cały

nazwa_1.jpg
nazwa_2.jpg
...
nazwa_NNN.jpg
Moje zaś pytanie dotyczy tego licznika właśnie - jak zmienić go by miał ,,wielkość'' trzech miejsc, tzn. by nazywał pliki nazwa_001.jpg i tak dalej, bo w ten sposób byłoby to dużo wygodniejsze.

: 27 lutego 2011, 00:24
autor: pyrion

Kod: Zaznacz cały

printf "%03d" $numer

: 27 lutego 2011, 00:41
autor: kodama
O, rewelacja, dziękuje kolego. O takie coś właśnie chodziło, świetnie :)

: 28 lutego 2011, 19:21
autor: kodama
Dobra, to mam jeszcze jedno pytanie. Trochę postanowiłem usprawnić ten skrypt w miarę możliwości (ważna rzecz - żeby zmieniał nazwy takich plików, które zawierają w sobie spację, lub też kilka spacji). Wyszukałem na forach, że można to załatwić taką pętelką:

Kod: Zaznacz cały

IFS=$'\n'
for p in *
 do
   plik=$(echo $p | tr [:blank:] '_')

	if [ -f "$p" ] && [ ! -f $plik ] ;
		then
   		mv "$p" $plik
	fi

done
unset IFS
Pytanie moje dotyczy tego IFS. Z tego co rozumiem, to jest to zmienna, w której zapisany jest "domyślny systemowy znak rozdzielający" (to właśnie spacja, tak?). Nie rozumiem natomiast po co ją zmieniamy na początku, przed for i zmieniamy unset po wykonaniu pętli?

: 28 lutego 2011, 22:09
autor: pyrion
Zamiast pętli wystarczy wykonać

Kod: Zaznacz cały

rename 'y/\ /_/' *
w katalogu z plikami.

: 01 marca 2011, 08:14
autor: kodama
No racja, super. Dzięki za podpowiedź pyrion.