[+] Zmiana formatu licznika w skrypcie

Potrzebujesz pomocy z C, C++, perl, python, itp.
Awatar użytkownika
kodama
Junior Member
Posty: 633
Rejestracja: 23 maja 2010, 22:30
Lokalizacja: Poznań

[+] Zmiana formatu licznika w skrypcie

Post 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.
pyrion
Posty: 42
Rejestracja: 13 czerwca 2009, 12:04

Post autor: pyrion »

Kod: Zaznacz cały

printf "%03d" $numer
Awatar użytkownika
kodama
Junior Member
Posty: 633
Rejestracja: 23 maja 2010, 22:30
Lokalizacja: Poznań

Post autor: kodama »

O, rewelacja, dziękuje kolego. O takie coś właśnie chodziło, świetnie :)
Awatar użytkownika
kodama
Junior Member
Posty: 633
Rejestracja: 23 maja 2010, 22:30
Lokalizacja: Poznań

Post 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?
pyrion
Posty: 42
Rejestracja: 13 czerwca 2009, 12:04

Post autor: pyrion »

Zamiast pętli wystarczy wykonać

Kod: Zaznacz cały

rename 'y/\ /_/' *
w katalogu z plikami.
Awatar użytkownika
kodama
Junior Member
Posty: 633
Rejestracja: 23 maja 2010, 22:30
Lokalizacja: Poznań

Post autor: kodama »

No racja, super. Dzięki za podpowiedź pyrion.
ODPOWIEDZ