Nowe posty

Autor Wątek: Skrypt zmieniający nazwy plików  (Przeczytany 3939 razy)

megotpelka

  • Gość
Skrypt zmieniający nazwy plików
« dnia: 2009-11-11, 09:35:06 »
Napisałem to:
#!/bin/bash
for of in *; do
    # Jeśli to w ogóle plik
    if [ -f "$of" ]; then
        nf=`echo -n "$of" | sed "s/$1/\\$2/g"`;
        # Jeśli nazwa uległa zmianie
        if [ "$nf" != "$of" ]; then
            # --, żeby przypadkiem `of` nie zostało potraktowane jako opcja
            mv -- "$of" "$nf"
        fi
    fi
done
Tak jak widać szukając po wszystkich plikach katalogu bieżącego w nazwach plików chciałbym znaleźć człon $1 i zmienić go na $2. Niestety działanie wygląda tak że zmieniana jest nazwa skryptu a plik z tym danym członem jest kasowany. Co jest nie tak ? Ponieważ pracuje pod LiveCD prosiłbym o przetestowanie u was kodu.

arctgx

  • Gość
Skrypt zmieniający nazwy plików
« Odpowiedź #1 dnia: 2009-11-11, 15:41:35 »
Nie wnikając w Twój pomysł, pozwolę sobie zapytać czy nie prościej z
nf="${of//$1/$2}"
zamiast z postacią "echo | sed"?

Na pierwszy rzut oka Twój kod wygląda poprawnie. Nazwa bieżącego skryptu siedzi pod zmienną $ (czyli odczytujesz go przez $$). W ten sposób możesz go wyeliminować, jeśli siedzi w obrabianym katalogu. Nie mogę dopatrzyć się kasowania poza przypadkiem w stylu zamiany "a" na "b" w katalogu, gdzie masz piki "ax" i "bx". Wtedy albo sprawdzasz istnienie pliku $nf, albo dajesz specjalne opcje dla mv.

megotpelka

  • Gość
Skrypt zmieniający nazwy plików
« Odpowiedź #2 dnia: 2009-11-11, 16:46:43 »
Skrypt miał mi posłużyć do zamiany nazw zdjęć zgranych z aparatu np. P1000123.jpg na Wakacje123.jpg więc kasowanie nie powinno się pojawić. Co do mojej troszkę skomplikowanej konstrukcji z echo i sed to wymagania prowadzącego są takie a nie inne :(

arctgx

  • Gość
Skrypt zmieniający nazwy plików
« Odpowiedź #3 dnia: 2009-11-11, 18:00:19 »
http://newbie.linux.pl/?id=article&kategoria=89&show=391
Może prowadzący nie wie o możliwości obycia się bez zewnętrznych poleceń ;)