[+] Zmiana nazw plików ze spacjami

Potrzebujesz pomocy z C, C++, perl, python, itp.
zloty87
Posty: 70
Rejestracja: 04 lutego 2009, 12:14

[+] Zmiana nazw plików ze spacjami

Post autor: zloty87 »

Witam.

Na wstępie zaznaczę, że jestem zielony jeśli chodzi o programowanie, dopiero zaczynam ale mam ambicje nauczyć się jak najwięcej, więc proszę o wyrozumiałość.
W związku z tym że potrzebuję masowo zmienić nazwy plików w katalogach, postanowiłem napisać sobie skrypt. Nie było by żadnego problemu, gdyby nie to że potrzebując zamienić plik ze spacjami w nazwach (dokładnie to zamienić spacje na podkreślenia). Tak więc, wpadłszy na "genialny" pomysł wykorzystania pętli for skrypt napisałem, ale srogo się zawiodłem gdy spostrzegłem że pętla "widzi" fragmenty nazw pomiędzy spacjami jako osobne pliki.
Dlatego zwracam się z prośbą do Was - bardziej kompetentnych o pomoc. Oto kod mojego skryptu (pewnie jest prostacki, ale jestem początkujący w bashu):

Kod: Zaznacz cały

#!/bin/bash
for i in $1*.flac
do
ls $1 | sed -e 's/ /_/g' | xargs -0 mv $1*.flac
done;
I jeszcze jedna kwestia, nie związana z powyższym ale szkoda zakładać kolejny temat. Wrzuciłem sobie skrypt flac2mp3 do folderu /usr/bin/, ale przy wywoływaniu tego programu jawi mi się taka oto informacja:
line 1: #!/bin/bash: No such file or directory
która mnie dziwi gdyż bash jest, na co wskazuje polecenie "which bash".

I ostatnia prośba. Możecie polecieć dobre materiały do nauki basha? Najlepiej po polsku i w stylu "bash for dummies". Oraz, czy sądzicie że zakup książki "bash. Receptury" będzie sensownym wyborem?

Dziękuję za odpowiedzi i pozdrawiam.
sigo
Junior Member
Posty: 501
Rejestracja: 21 marca 2009, 19:12

Post autor: sigo »

ponton
Beginner
Posty: 406
Rejestracja: 24 stycznia 2007, 01:40
Lokalizacja: Kalisz/Wroc³aw

Post autor: ponton »

Moja wersja skryptu:

Kod: Zaznacz cały

for i in *.flac
do
    echo -n $i | tr " " _ | xargs -0 mv "$i"
done;
1. Nie wiem, do czego służył u Ciebie pierwszy parametr.
2. Nie trzeba używac ls, by wypisać nazwę zmiennej, wystarczy echo.
3. Do zamieniania jednej litery na inną służy program tr (najlepiej poczytaj o "GNU textutils" -- man texutils).
4. Spacje trzeba albo dawać w cudzysłów albo escape'ować (czyli poprzedzać backslashem).
Wrzuciłem sobie skrypt flac2mp3 do folderu /usr/bin/
Takie ,,swoje'' rzeczy to najlepiej wrzucać do ~/bin lub ew. /usr/local/bin, żeby sobie bałaganu nie zrobić w systemie.

A co do tego komunikatu, to może w tym skrypcie jakaś literówka jest?

Nie ma sensu kupować książki o bashu, wystarczy poczytać dokumentację.
zloty87
Posty: 70
Rejestracja: 04 lutego 2009, 12:14

Post autor: zloty87 »

@sigo
Dziękuję, ale prosiłbym o coś jednak na wyższym poziomie. Znajomość pętli i instrukcji posiadam. Teraz potrzebuję dobrego poradnika jak wykorzystać to w praktyce, dobre przykłady i wyjaśnienia.

@ponton
Pierwszy parametr jest ścieżką do folderu, w którym na nastąpić zmiana nazw plików. Użyłem seda, bo myślałem że jeszcze coś będę nim robił i tak już zostało ;)

Edit:

Dzięki Ponton, faktycznie działa. Temat zakończony, a jakby ktoś nie zauważył, podając mv parametr naleey go wziąć w cudzysłów - "$i".
fnmirk
Senior Member
Posty: 8321
Rejestracja: 03 grudnia 2007, 06:37

Post autor: fnmirk »

zloty87, przejrzyj dział z linkami i zadaj kilka pytań ,,szukajce'' na forum. Jest bardzo dużo materiałów.
Awatar użytkownika
lis6502
Member
Posty: 1798
Rejestracja: 05 listopada 2008, 20:14
Lokalizacja: Miasto Szybowców

Post autor: lis6502 »

Najlepszym kursem basha poruszającym newralgiczne kwestie jest niewątpliwie advanced bash scripting.
ODPOWIEDZ