Seryjna zmiana nazw rozszerzeń pakowanych plików

Problemy dotyczące programowania.

Moderatorzy: Moderatorzy, Administratorzy

vitos
Użytkownik
Posty: 104
Rejestracja: 2005-10-30, 09:13
Lokalizacja: Pszów
Kontakt:

Seryjna zmiana nazw rozszerzeń pakowanych plików

Post autor: vitos » 2009-05-15, 19:26

Niby banalna sprawa, ale stanąłem na tym :-)

Chcę spakować pliki foo.tar bar.tar w danym katalogu programem xz, ażeby rozszerzenia po spakowaniu były foo.txz oraz bar.txz

Gdy daję

Kod: Zaznacz cały

find . -name \*.tar -exec xz -z9 -S.txz {} \;
pliki wychodzą foo.tar.txz oraz bar.tar.txz, a chcę, by były foo.txz i bar.txz.

Pomóżcie proszę.
Witek

Awatar użytkownika
Lizard
Moderator
Posty: 2583
Rejestracja: 2005-05-21, 15:48
Lokalizacja: miasto w mieście

Re: Seryjna zmiana nazw rozszerzeń pakowanych plików

Post autor: Lizard » 2009-05-15, 19:48

Kod: Zaznacz cały

find . -name \*.tar | sed -e 's/\.tar$//' | xargs xz -z9 -S.txz
Jeśli wszystkie pliki są w jednym katalogu (bez podkatalogów):

Kod: Zaznacz cały

ls . | sed -e 's/\.tar$//' | xargs xz -z9 -S.txz
lub:

Kod: Zaznacz cały

for FILENAME in *.tar; do xz -z9 -S.txz "${FILENAME%.tar}"; done
Ostatnie wydaje się być o tyle dobre, że nie angażuje innych programów (find, sed, xargs) poza powłoką i xz.
Wynik find można również umieścić jako parametry dla for i dalej tak samo jak w ostatnim:

Kod: Zaznacz cały

for FILENAME in $(find . -name \*.tar); do xz -z9 -S.txz "${FILENAME%.tar}"; done
Error 404 - footer not found

Awatar użytkownika
mina86
Moderator
Posty: 3314
Rejestracja: 2004-06-14, 21:58
Lokalizacja: Linux 4.x x86_64
Kontakt:

Re: Seryjna zmiana nazw rozszerzeń pakowanych plików

Post autor: mina86 » 2009-05-15, 20:03

W zasadzie parzyste rozwiązania podane przez Lizarda są błędne, a przy pierwszym należy być świadomym, iż nie zadziała dla plików ze znakiem przejścia do nowej linii w nazwie.
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

vitos
Użytkownik
Posty: 104
Rejestracja: 2005-10-30, 09:13
Lokalizacja: Pszów
Kontakt:

Re: Seryjna zmiana nazw rozszerzeń pakowanych plików

Post autor: vitos » 2009-05-15, 20:45

Kurcze, że nie wpadłem na pomysł, żeby sed'em obcinać rozszerzenie :-) i potem dopiero je dodawać xz'tem.

Kod: Zaznacz cały

find . -name \*.tar | sed -e 's/\.tar$//' | xargs xz -z9 -S.txz
Jesteście genialni chłopaki, bardzo dziękuję za pomoc.

Witek
Ostatnio zmieniony 2009-05-15, 20:46 przez vitos, łącznie zmieniany 2 razy.

Awatar użytkownika
Lizard
Moderator
Posty: 2583
Rejestracja: 2005-05-21, 15:48
Lokalizacja: miasto w mieście

Re: Seryjna zmiana nazw rozszerzeń pakowanych plików

Post autor: Lizard » 2009-05-16, 06:05

mina86, SOA #1. ;-)
Error 404 - footer not found

Awatar użytkownika
mina86
Moderator
Posty: 3314
Rejestracja: 2004-06-14, 21:58
Lokalizacja: Linux 4.x x86_64
Kontakt:

Re: Seryjna zmiana nazw rozszerzeń pakowanych plików

Post autor: mina86 » 2009-05-16, 07:13

Zrób zawczasu

Kod: Zaznacz cały

mv foo.tar 'f o o.tar'
mv bar.tar 'b
a
r.tar'
to pogadamy.
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

joi
Użytkownik
Posty: 151
Rejestracja: 2004-10-12, 20:32
Lokalizacja: raczej nie stąd ;)
Kontakt:

Re: Seryjna zmiana nazw rozszerzeń pakowanych plików

Post autor: joi » 2009-05-17, 21:34

Kod: Zaznacz cały

rename .tar.txz .txz *.tar.txz

Kod: Zaznacz cały

man 1 rename

ODPOWIEDZ