Bash - zmiana nazw plików wed

Potrzebujesz pomocy z C, C++, perl, python, itp.
lupinek
Posty: 11
Rejestracja: 16 kwietnia 2008, 23:11

Bash - zmiana nazw plików według schematu

Post autor: lupinek »

Witam, próbuję napisać skrypt do zmiany nazw plików według schematu i nie bardzo wiem jak się do tego zabrać.
Chciałbym, aby plik o nazwie np.:

Kod: Zaznacz cały

abc - 1 - def.avi
został zamieniony na:

Kod: Zaznacz cały

abc 01 - def.avi
Z góry dziękuję za wszelkie wskazówki.
Awatar użytkownika
lis6502
Member
Posty: 1798
Rejestracja: 05 listopada 2008, 20:14
Lokalizacja: Miasto Szybowców

Post autor: lis6502 »

Wskazówki, hmm. Na pewno awk, sed i grep do tego znajomości 'łapek'

Kod: Zaznacz cały

  '   i   `   
i innych znaków kluczowych. Reszty grzechów nie pamiętam. W totalcmd pod Win jest takie coś jak multi-rename tool oparte o Delphi'kowatą bibliotekę TRegExpr i tutaj zahaczyłbym się na początek.
lupinek
Posty: 11
Rejestracja: 16 kwietnia 2008, 23:11

Post autor: lupinek »

A trochę więcej szczegółów? Jestem zielony.
Awatar użytkownika
lis6502
Member
Posty: 1798
Rejestracja: 05 listopada 2008, 20:14
Lokalizacja: Miasto Szybowców

Post autor: lis6502 »

Na dobry początek

Kod: Zaznacz cały

man bash
a potem na forum są gdzieś przyklejone poradniki co do basha. Poszukaj w programowaniu.
yakow
Posty: 52
Rejestracja: 13 czerwca 2008, 09:30

Post autor: yakow »

Tak na szybko. Sprawdź czy zadziała. Mnie dla paru fikcyjnie utworzonych plików według Twojego wzorca zadziałało.

Kod: Zaznacz cały

#!/bin/bash
find $1 -name '* *' | while read FILE
do
        mv "$FILE" "`echo $FILE | awk '{print $1, 0$3,"-",$5}'`"
done

Kod: Zaznacz cały

sh skrypt.sh <folder>
Można by jeszcze dodać, że jak jest nr filmu większy niż 9 to nie dodaje 0 (bo nam powychodzi 013 np.), ale muszę spadać, więc najwyżej dopiszę później jak bardzo potrzebujesz.

P.S.
To zmieni wszystkie pliki w danym katalogu według wzorca. Jeśli chcesz możesz zrobić w find np. filtr tylko dla avi albo mp3 albo co tam chcesz zechcesz.
lupinek
Posty: 11
Rejestracja: 16 kwietnia 2008, 23:11

Post autor: lupinek »

Ok, wielkie dzięki :)
Mam jeszcze pytanie: jak wyświetlić na ekranie wszystkie wyrazy, zdania począwszy np. od 3, nie znając ich liczby?
np.:

Kod: Zaznacz cały

Ala ma kota, a kot ma Alę(...)
i chciałbym wyświetlić wszystko zaczynając od 3 wyrazu, czyli:

Kod: Zaznacz cały

a kot ma Alę(...)
z tym, że (...) oznacza dalsze wyrazy o nieznanej liczbie.
yakow
Posty: 52
Rejestracja: 13 czerwca 2008, 09:30

Post autor: yakow »

Nie jest to może za ładne i sprytne rozwiązanie, ale działa:

Kod: Zaznacz cały

#!/bin/bash
#use: sh skrypt.sh "<tekst>" <nr_slowa>
echo $1 | cut -d " " -f $2-`echo $1 | wc -w`
Przykład:

Kod: Zaznacz cały

wielo|eros:~ # sh skrypt.sh "Ala ma kota bla bla bla" 2
ma kota bla bla bla
ma kota bla bla bla
wielo|eros:~ # 
Wyświetli nam od drugiego (włącznie z drugim) do ostatniego słowa.

Pamiętaj, że ten tekst musisz podać w cudzysłowiach, bo inaczej lipa ;-)

Edit: Mała poprawka, zmieniłem użycie awk na wc, żeby było ładniej i krócej :mrgreen:
lupinek
Posty: 11
Rejestracja: 16 kwietnia 2008, 23:11

Post autor: lupinek »

Czy mógłbyś ten fragment

Kod: Zaznacz cały

$1 | cut -d " " -f $2-`echo $1 | wc -w`
przypisać do zmiennej? Próbuję i próbuję i ciągle coś jest nie tak z cudzysłowami czy innymi apostrofami. Nie wiem, pewnie gdzieś jakieś głupie przeoczenie...
ODPOWIEDZ