Skrypt usuwajacy dodatkowe rozszerzenie.

Problemy dotyczące programowania.

Moderatorzy: Moderatorzy, Administratorzy

siupol
Użytkownik
Posty: 10
Rejestracja: 2007-06-05, 20:18
Lokalizacja: Krakow

Skrypt usuwajacy dodatkowe rozszerzenie.

Post autor: siupol »

witam wszystkich.

Taka prosba do kolegow. Mam taki skrypt

Kod: Zaznacz cały

#!/bin/bash
for a in *.ufs_ntfs; do mv $a `basename $a .ufs_ntfs`; done
chodzi o to ze oddzyskiwalem stare pliki z dysk.
Ale program nadpisal nazwy plikow i dodal do wiekszosci nazw

Kod: Zaznacz cały

.ufs_ntfs
Jak poprawic ten skrypt zeby kasowal dodatkowe rozszeszenia ze wszyskich plikow i zeby zaliczyl takze podkatalogi.
A moze jest jakies narzedzie ktore samo poprawi nazwy plikow.
Czytalem o MMV ale nie znalazlem na sieci. Kilka tgz ale nie sprawne
Z gory dziekuje pozdrawiam
[img]http://img228.imageshack.us/img228/8452/21205353139pq5.png[/img]
[img]http://img148.imageshack.us/img148/9879/slackware1userbarzl9.gif[/img]
Awatar użytkownika
webster
Użytkownik
Posty: 1269
Rejestracja: 2009-10-06, 11:58
Lokalizacja: Gdańsk
Kontakt:

Re: Skrypt usuwajacy dodatkowe rozszerzenie.

Post autor: webster »

Kod: Zaznacz cały

find -type f -exec rename  ".ufs_ntfs" ""  {} \;
††† Chaos Of The Mirror - Valheru †††
††† I ♥ SlackWare RuLeZ †††

Slackware Poland FaceBook
Awatar użytkownika
mina86
Moderator
Posty: 3343
Rejestracja: 2004-06-14, 21:58
Lokalizacja: Linux 5.x x86_64
Kontakt:

Re: Skrypt usuwajacy dodatkowe rozszerzenie.

Post autor: mina86 »

Tak przy okazji, ten skrypt powinien wyglądać następująco:

Kod: Zaznacz cały

#!/bin/sh
for a in *.ufs_ntfs; do mv "$a" "${a%.ufs_ntfs}"; done
A co do rozwiązania webstera, to szybciej będzie tak:

Kod: Zaznacz cały

find -type f -exec rename  ".ufs_ntfs" ""  {} +
Co prawda wymaga to rozszerzenia do find, ale Slackware ma wersję find, która obsługuje plus. Zresztą rename sam w sobie jest niestandordowy i wiele dystrybucji ma wersję, która działa zupełnie inaczej.
Zastrzegam sobie prawo nieanalizowania postów pisanych niepoprawną polszczyzną.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
Awatar użytkownika
webster
Użytkownik
Posty: 1269
Rejestracja: 2009-10-06, 11:58
Lokalizacja: Gdańsk
Kontakt:

Re: Skrypt usuwajacy dodatkowe rozszerzenie.

Post autor: webster »

Zgadzam się z mina86, że wskakuję na find i rename, ale zakładałem, że kolega nie ma ubogiej dys.

Problem w for pojawia się, gdy mamy do czynienia z podkatalogami.
siupol pisze:Jak poprawic ten skrypt zeby kasowal dodatkowe rozszeszenia ze wszyskich plikow i zeby zaliczyl takze podkatalogi.
††† Chaos Of The Mirror - Valheru †††
††† I ♥ SlackWare RuLeZ †††

Slackware Poland FaceBook
Awatar użytkownika
mina86
Moderator
Posty: 3343
Rejestracja: 2004-06-14, 21:58
Lokalizacja: Linux 5.x x86_64
Kontakt:

Re: Skrypt usuwajacy dodatkowe rozszerzenie.

Post autor: mina86 »

Oczywiście. Mój komentarz dotyczący skryptu jest zupełnie niezależny od całej reszty problemu.
Zastrzegam sobie prawo nieanalizowania postów pisanych niepoprawną polszczyzną.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
Pajaczek
Użytkownik
Posty: 1439
Rejestracja: 2006-08-03, 13:16
Lokalizacja: Winny Gród

Re: Skrypt usuwajacy dodatkowe rozszerzenie.

Post autor: Pajaczek »

mina86 pisze:Tak przy okazji, ten skrypt powinien wyglądać następująco:

Kod: Zaznacz cały

#!/bin/sh
for a in *.ufs_ntfs; do mv "$a" "${a#.ufs_ntfs}"; done
Chciałem sprawdzić dlaczego, a dostałem...

Kod: Zaznacz cały

bash-4.1$ ls 
1.aa  2.aa  3.aa
bash-4.1$ for i in *.aa; do mv "$i" "${i#.aa}"; done
mv: `1.aa' i `1.aa' to ten sam plik
mv: `2.aa' i `2.aa' to ten sam plik
mv: `3.aa' i `3.aa' to ten sam plik
Awatar użytkownika
webster
Użytkownik
Posty: 1269
Rejestracja: 2009-10-06, 11:58
Lokalizacja: Gdańsk
Kontakt:

Re: Skrypt usuwajacy dodatkowe rozszerzenie.

Post autor: webster »

Zgaduję, że mina86 chodziło o:

Kod: Zaznacz cały

#!/bin/sh
for a in *.ufs_ntfs; do mv "$a" "${a/.ufs_ntfs}"; done
Zwyczajnie separator z # na / Zamień w "${a/.ufs_ntfs}"
††† Chaos Of The Mirror - Valheru †††
††† I ♥ SlackWare RuLeZ †††

Slackware Poland FaceBook
Awatar użytkownika
mina86
Moderator
Posty: 3343
Rejestracja: 2004-06-14, 21:58
Lokalizacja: Linux 5.x x86_64
Kontakt:

Re: Skrypt usuwajacy dodatkowe rozszerzenie.

Post autor: mina86 »

Ah, sorry. Zamiast # powinien być %.

Kod: Zaznacz cały

#!/bin/sh
for a in *.ufs_ntfs; do mv "$a" "${a%.ufs_ntfs}"; done
(Poprawiłem też w oryginalnym poście).
Co istotne to użycie cudzysłowów. Bez nich, skrypt można bardzo łatwo wywrócić.
Zastrzegam sobie prawo nieanalizowania postów pisanych niepoprawną polszczyzną.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
ODPOWIEDZ