[bash] Pobieranie nazwy pliku

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Slesz
Piegowaty Guziec
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

Post autor: Slesz »

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ą.
Awatar użytkownika
beluosus
Zakręcona Traszka
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

Post autor: beluosus »

Jeden z plików, więc najłatwiej chyba wybrać pierwszy, który się napatoczy. ;)

Kod: Zaznacz cały

ls | head -1
Pobieranie nazwy bez rozszerzenia:

Kod: Zaznacz cały

fn=$(basename /home/beluosus/test.cpp); fn=${fn%.*} ; echo $fn
Nazwa najmniejszego pliku z katalogu:

Kod: Zaznacz cały

ls -lS | tail -1 | sed 's/.*[0-9]\{2\}:[0-9]\{2\} //'
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
Slesz
Piegowaty Guziec
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

Post autor: Slesz »

Dziękuję, już trochę lepiej idzie, ale jako newbie nadal nie wszystko tak łatwo mi przychodzi.

Kod: Zaznacz cały

fn=$(basename [ściecha]/*.*)
7zip a [opcje] $fn.7z *.ccd *.img *.sub
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

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 *
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.
Awatar użytkownika
beluosus
Zakręcona Traszka
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

Post autor: beluosus »

Przeanalizuj kod, który dałem. To wydrukuje nazwę pierwszego pliku w katalogu:

Kod: Zaznacz cały

fn=$(basename "$(ls | head -1)"); fn=${fn%.*} ; echo $fn
Cudzysłów sprawia, że plik może posiadać spacje w nazwie.
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
Slesz
Piegowaty Guziec
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

Post autor: Slesz »

Ugh, wklepywałem bez cudzysłowu. Dziękuję.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 11 gości