Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1






Admin łajza







Mam następujący problem: mam dużą ilość plików o nazwach w stylu
plik1.gif plik2.gif plik10.gif plik20.gif plik100.gif plik200.gif
i chciałbym im zmienić nazwy na
plik001.gif plik002.gif plik010.gif plik020.gif plik100.gif plik200.gif
Pierwszym pomysłem było
mv plik[0-9].gif plik00\1.gif mv plik[0-9][0-9].gif plik0\1\2.gif
I metoda ta działała w katalogu testowym dopóki miałem po jednych plikach z wzorca (tylko plik1.gif, plik10.gif), jak dorzuciłem kolejne, tak że plik[0-9].gif odpowiadało więcej niż jednemu plikowi to mv wywalał błąd, że plik00\1.gif nie jest katalogiem (no i słusznie).
Następnie próbowałem powalczyć z pętlą for, z find i -exec, ale tutaj wyniki były jeszcze gorsze, zupełnie nic mi się nie udało osiągnąć (zamienie wszystkich plik[0-9].gif na jedno plik001.gif sukcesem raczej nie jest ;]).
Ma ktoś jakikolwiek pomysł jak automagicznie zmienić te nazwy?
Ostatnio edytowany przez azhag (2007-11-18 13:07:01)
Offline


Członek DUG



jest wtyczka do krusadera do masowej zmainy nazw plikow a le nie wiem czy ci o to chodzi

Offline

Użytkownik


Trochę siłowo, ale powinno działać:
#!/bin/bash
# plikX.gif na plik00X.gif
x=1;
while [ $x -le 9 ]; do
nazwa="plik$x.gif"
if [ -f "$nazwa" ]; then
echo "Zmieniam $nazwa na plik00$x.gif"
mv "$nazwa" "plik00$x.gif"
fi
x=$[x + 1]
done
# plikXX.gif na plik0XX.gif
x=10;
while [ $x -le 99 ]; do
nazwa="plik$x.gif"
if [ -f "$nazwa" ]; then
echo "Zmieniam $nazwa na plik0$x.gif"
mv "$nazwa" "plik0$x.gif"
fi
x=$[x + 1]
doneOffline






Admin łajza







siłowo, niesiłowo -- działa, dzięki
swoją drogą: lol. taki ze mnie masta, że regexpami chciałem to robić, a rozwiązania się okazuje bardziej niż banalne :) KISS, KISS i jeszcze raz KISS, nie należy nigdy motać ;)
Ostatnio edytowany przez azhag (2007-11-18 13:10:57)
Offline





Bicycle repairman






Bardziej uniwersalne rozwiązanie.
#!/bin/sh
PLIK='plik5.gif'
BAZA='plik'
ROZ='gif'
ILOSC_MIEJSC=3
NAZWA=${PLIK#$BAZA}
LICZBA=${NAZWA%.$ROZ}
LEN=${#LICZBA}
let "ILOSC_ZER = ILOSC_MIEJSC - LEN"
while [ $ILOSC_ZER -gt "0" ]
do
LICZBA=0$LICZBA
let "ILOSC_ZER -= 1"
done
echo $BAZA$LICZBA.$ROZOffline
Strony: 1