[bash] Pobieranie nazwy pliku
-
- Piegowaty Guziec
- Posty: 15
- Rejestracja: 07 lut 2007, 03:51
- Płeć: Mężczyzna
- Wersja Ubuntu: 13.10
- Środowisko graficzne: Unity
- Architektura: x86_64
[bash] Pobieranie nazwy pliku
Może to i proste, ale mocuję się z tym od jakiegoś czasu. Piszę skrypt, a właściwie walę wszystko do jednego aliasa. Co skrypt ma robić?
rozpakowywać archiwum (7zip lub rar),
wykonywać program unecm na plikach z rozszerzeniem *.ecm,
kasować rozpakowane archiwum i plik *.ecm
pakować rozpakowane pliki 7zipem (o możliwych rozszerzeniach *.ccd *.img *.sub *.bin *.cue *.iso *.mds *.mdf) nadając nazwę pierwszego pliku, który będzie wrzucany do archiwum
pakować te same pliki rarem (te same możliwe rozszerzenia) z tą samą nazwą, co wyżej
kasować pliki o wyżej wymienionych rozszerzeniach (pozostrawiać stworzone archiwa)
porównać wielkości plików i przenieść mniejszy do danego folderu
Problem mam z pobraniem nazwy jednego z plików (dowolnego, bo wszystkie będą miały tę samą nazwę za wyjątkiem rozszerzenia) i nazwaniem tak archiwum, a także z rozpoznawaniem wielkości plików i przenoszenia tego najmniejszego.
Jestem względnie ciemny w tych sprawach, do tej pory robiłem to ręcznie i dawałem radę, ale o wiele łatwiej by mi było zautomatyzować te czynności i mieć pod jedną komendą.
rozpakowywać archiwum (7zip lub rar),
wykonywać program unecm na plikach z rozszerzeniem *.ecm,
kasować rozpakowane archiwum i plik *.ecm
pakować rozpakowane pliki 7zipem (o możliwych rozszerzeniach *.ccd *.img *.sub *.bin *.cue *.iso *.mds *.mdf) nadając nazwę pierwszego pliku, który będzie wrzucany do archiwum
pakować te same pliki rarem (te same możliwe rozszerzenia) z tą samą nazwą, co wyżej
kasować pliki o wyżej wymienionych rozszerzeniach (pozostrawiać stworzone archiwa)
porównać wielkości plików i przenieść mniejszy do danego folderu
Problem mam z pobraniem nazwy jednego z plików (dowolnego, bo wszystkie będą miały tę samą nazwę za wyjątkiem rozszerzenia) i nazwaniem tak archiwum, a także z rozpoznawaniem wielkości plików i przenoszenia tego najmniejszego.
Jestem względnie ciemny w tych sprawach, do tej pory robiłem to ręcznie i dawałem radę, ale o wiele łatwiej by mi było zautomatyzować te czynności i mieć pod jedną komendą.
- beluosus
- Zakręcona Traszka
- Posty: 695
- Rejestracja: 01 paź 2006, 15:32
- Płeć: Mężczyzna
- Wersja Ubuntu: inny OS
- Środowisko graficzne: Xfce
- Architektura: x86
- Kontakt:
Odp: [bash] Pobieranie nazwy pliku
Jeden z plików, więc najłatwiej chyba wybrać pierwszy, który się napatoczy.
Pobieranie nazwy bez rozszerzenia:
Nazwa najmniejszego pliku z katalogu:

Kod: Zaznacz cały
ls | head -1
Kod: Zaznacz cały
fn=$(basename /home/beluosus/test.cpp); fn=${fn%.*} ; echo $fn
Kod: Zaznacz cały
ls -lS | tail -1 | sed 's/.*[0-9]\{2\}:[0-9]\{2\} //'
-
- Piegowaty Guziec
- Posty: 15
- Rejestracja: 07 lut 2007, 03:51
- Płeć: Mężczyzna
- Wersja Ubuntu: 13.10
- Środowisko graficzne: Unity
- Architektura: x86_64
Odp: [bash] Pobieranie nazwy pliku
Dziękuję, już trochę lepiej idzie, ale jako newbie nadal nie wszystko tak łatwo mi przychodzi.
z tym, że nazwa miewa spacje (różne pliki, różne ilości spacji), czyli skrypt powinien brać nazwę prawidłowo albo wstawiać backslash przed spacjami i nawiasami, żeby wstawiało pełną nazwę albo prawidłowo ją wczytywać...
Poza tym, wstyd się przyznać, ale opcje z ls jedynie wyświetlają mi nazwę, chciałbym wczytać je do zmiennej tak, abym mógł dać coś w rodzaju
W ten sposób mógłbym spakować pliki obrazu płyty na dwa sposoby z tą samą, domyślną nazwą, przenieść mniejszy (a z tym w przypadku 7zipa i rara różnie bywa, choć generalnie 7zip częściej bywa lepszy) w bezpieczne miejsce i skasować niepotrzebne śmieci.
EDit: Słowem - jak pobrać znalezioną nazwę do zmiennej. Read tylko pyta użytkownika o podanie.
Kod: Zaznacz cały
fn=$(basename [ściecha]/*.*)
7zip a [opcje] $fn.7z *.ccd *.img *.sub
Poza tym, wstyd się przyznać, ale opcje z ls jedynie wyświetlają mi nazwę, chciałbym wczytać je do zmiennej tak, abym mógł dać coś w rodzaju
Kod: Zaznacz cały
7z a [opcje] $nazwa_dowolnego_pliku_archiwizowanego *.[rozszerzenia]
rar a [opcje] $nazwa_dowolnego_pliku_archiwizowanego *.[rozszerzenia]
mv $nazwa_pliku_mniejszego [folder docelowy]
rm *
EDit: Słowem - jak pobrać znalezioną nazwę do zmiennej. Read tylko pyta użytkownika o podanie.
- beluosus
- Zakręcona Traszka
- Posty: 695
- Rejestracja: 01 paź 2006, 15:32
- Płeć: Mężczyzna
- Wersja Ubuntu: inny OS
- Środowisko graficzne: Xfce
- Architektura: x86
- Kontakt:
Odp: [bash] Pobieranie nazwy pliku
Przeanalizuj kod, który dałem. To wydrukuje nazwę pierwszego pliku w katalogu:
Cudzysłów sprawia, że plik może posiadać spacje w nazwie.
Kod: Zaznacz cały
fn=$(basename "$(ls | head -1)"); fn=${fn%.*} ; echo $fn
-
- Piegowaty Guziec
- Posty: 15
- Rejestracja: 07 lut 2007, 03:51
- Płeć: Mężczyzna
- Wersja Ubuntu: 13.10
- Środowisko graficzne: Unity
- Architektura: x86_64
Odp: [bash] Pobieranie nazwy pliku
Ugh, wklepywałem bez cudzysłowu. Dziękuję.
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 11 gości