Skrypt usuwajacy dodatkowe rozszerzenie.

Problemy dotyczące programowania.

Moderatorzy: Moderatorzy, Administratorzy

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

Skrypt usuwajacy dodatkowe rozszerzenie.

Post autor: siupol » 2014-02-25, 10:46

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: 1265
Rejestracja: 2009-10-06, 11:58
Lokalizacja: Gdańsk
Kontakt:

Re: Skrypt usuwajacy dodatkowe rozszerzenie.

Post autor: webster » 2014-02-25, 15:13

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: 3314
Rejestracja: 2004-06-14, 21:58
Lokalizacja: Linux 4.x x86_64
Kontakt:

Re: Skrypt usuwajacy dodatkowe rozszerzenie.

Post autor: mina86 » 2014-02-25, 15:58

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 called “mina86” in response to the previous one. :: Tiny Applications

Awatar użytkownika
webster
Użytkownik
Posty: 1265
Rejestracja: 2009-10-06, 11:58
Lokalizacja: Gdańsk
Kontakt:

Re: Skrypt usuwajacy dodatkowe rozszerzenie.

Post autor: webster » 2014-02-25, 16:26

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: 3314
Rejestracja: 2004-06-14, 21:58
Lokalizacja: Linux 4.x x86_64
Kontakt:

Re: Skrypt usuwajacy dodatkowe rozszerzenie.

Post autor: mina86 » 2014-02-25, 17:25

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 called “mina86” in response to the previous one. :: Tiny Applications

Pajaczek
Użytkownik
Posty: 1439
Rejestracja: 2006-08-03, 13:16
Lokalizacja: Winny Gród

Re: Skrypt usuwajacy dodatkowe rozszerzenie.

Post autor: Pajaczek » 2014-02-25, 18:46

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: 1265
Rejestracja: 2009-10-06, 11:58
Lokalizacja: Gdańsk
Kontakt:

Re: Skrypt usuwajacy dodatkowe rozszerzenie.

Post autor: webster » 2014-02-25, 20:35

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: 3314
Rejestracja: 2004-06-14, 21:58
Lokalizacja: Linux 4.x x86_64
Kontakt:

Re: Skrypt usuwajacy dodatkowe rozszerzenie.

Post autor: mina86 » 2014-02-26, 16:48

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 called “mina86” in response to the previous one. :: Tiny Applications

ODPOWIEDZ