ďťż
 
 
   Mini-programik w oparciu o komendę - czy to możliwe?
 
 

Tematy

 
    
 

 

 

 

Mini-programik w oparciu o komendę - czy to możliwe?





mekosx - 28-03-2009 16:14
Witam. Używam programu rar do pakowania plików w dzielone archiwa RAR, używam do tego takiego polecenia: rar a -m0 -s -v209715200b plik_zapakowany.rar plik_do_zapakowania.AVI plik_do_zapakowania.TXT Ale denerwuje mnie to, że za każdym razem muszę odpalać terminal, wpisywać polecenie, podmieniać zmienne. I tu rodzi się pytanie - chciałbym napisać graficzną (z interfejsem graficznym) aplikację, której jedyną funkcją byłoby wyświetlenie okienka z dwoma polami - jednym z nazwą archiwum wyjściowego do wpisania, a drugim z nazwami plików do dodania do archiwum. Czyli jedno, które podmieniałoby plik_zapakowany.rar, a drugie, które dodawałoby po nim plik_do_zapakowania.AVI i plik_do_zapakowania.TXT przy okazji zamieniając znak przejścia do następnej linii na odstęp. Tzn. chciałbym móc dodać wiele plików w tym drugim polu. Mam nadzieję, że dobrze wyjaśniłem o co mi chodzi.
Niestety nie znam żadnego języka (poza HTML i nieco PHP, ale to się raczej w tym wypadku nie przyda), ale wydaje mi się że taki programik nie wymagałby specjalnych znajomości jakiegokolwiek języka... Jak i w czym można by coś takiego napisać, aby się zbytnio nie namęczyć?



Ister - 28-03-2009 17:58
Poczytaj dokumentację PHP. Jak najbardziej może się przydać, pod warunkiem, że zainstalujesz sobie odpowiednie pakiety do tego (czyli apache i php). Trochę to robota dookoła.

Możliwości masz dwie. Pierwsza to instalacja jakiejś istniejącej graficznej nakładki wywołującej odpowiednie komendy (która przy okazji pewnie będzie kombajnem do wszystkich rodzajów archiwów). Druga to nauczenie się podstaw języka (polecam C/C++ lub Pythona) i stworzenie odpowiedniego programu. Programik jest na tyle banalny, że nie wymaga wiele nauki, a jednocześnie na tyle skomplikowany, że jednak podstaw się nauczysz. Uważam, że warto pójść w drugim kierunku. Samouczki znajdziesz przez google.



mekosx - 28-03-2009 18:27
Z tego co wiem chyba żadna nakładka graficzna dla linuxa nie istnieje, na windowsa jest WinRAR i działa pod wine, jednak wolałbym zrobić coś unixowego i przy okazji nauczyć się podstaw programowania.
Słyszałem że można pisać programy w bash'u, mógłby mi ktoś objaśnić dokładnie na czym to polega?
I czym różni się skrypt od aplikacji?
Czym się różni na dobrą sprawę aplikacja od programu? :-P



lis6502 - 28-03-2009 18:29
Aplikacja == program. Pewnie ktoś chciał rozdzielić DOSowe programy (niewielozadaniowy system) na Windowsowe aplikacje (bo mądrzej brzmi).
Możesz popełnić skrypt w bashu, ale bash jest językiem skryptowym linii poleceń. Dopiero z wykorzystaniem gtkdialog można zrobić coś klikanego, ale na przykład mnie składnia xml gtkdialoga przerosła i porzuciłem mój projekt w diabły na rzecz pythona (któren ponoć wyrabia dobre nawyki).
Podstawy są nawet proste, jak zaznajomisz się z tym papierkiem, to czeka Cię Mekka wszystkich poważnie bashujących

Skrypt od programu różni się tym, że skrypt jest parsowany, a program wykonywany. Cóż to oznacza? Ano na początek niech starczy Ci wiedza, że skrypt jest czytelny dla człowiekia, a binarka nie (ktoś się pewnie nie zgodzi, ale ten ktoś będzie miał brodę do kolan i klawiaturę zintegrowaną z mózgiem).

A pomysł z php wcale nie był głupi: kto powiedział że przez przeglądarkę nie możesz wykonywać funkcji systemowych?



lessmian2 - 28-03-2009 18:35
Generalnie program jest to implementacja jakiegoś algorytmu w konkretnym już języku programowania. A Skrypty to też programy ;-) "Zwykłe" programy są kompilowane do postaci binarnej, natomiast skrypty są interpretowane (przez interpreter danego języka) przy każdym uruchomieniu - powoduje to oczywiście wolniejsze działanie w porównaniu do języków kompilowanych, ale w zastosowaniach do których języki skryptowe zostały stworzone raczej nie jest to wielką wadą. Skrypty w bashu to zestaw poleceń systemowych (możesz wykorzystać dowolne polecenie które jest dostępne w Twoim systemie z konsoli) oraz trochę logiki (pętle, wyrażenia warunkowe itp.) Z resztą już piszesz skrypty skoro coś tam dłubiesz w PHP - wszak PHP to też język skryptowy.

Edit: chyba lis6502 mnie ubiegł ;)



Ister - 28-03-2009 18:53
A próbowałeś tego ?

Jak chcesz się nauczyć, to projekt, który wymyśliłeś jest na początek w sam raz.



winnetou - 28-03-2009 19:11
Dziękuje...



mekosx - 28-03-2009 19:16
File Roller obsługuje tylko tworzenie archiwów pojedynczych (nie ma nigdzie opcji dzielenia na woluminy). I jeśli w bashu ciężko jest tworzyć graficzne programy to raczej ten język odpada.
A jeśli powiedzmy napisałbym program w pythonie to gdzie do niego wepchnąć graficzny interfejs, jak zamienić na uruchamialny program i jaki kurs do nauki tego języka jest najlepszy?



lis6502 - 28-03-2009 19:30
Odpowiedzi na te i inne pytania znajdziesz w /usr/share/doc/python2.5-doc/html/index.html po wydaniu polecenia apt-get install python-doc Dodam, że python jest parsowany.



mekosx - 29-03-2009 12:41
Ten python chyba mnie przerasta...

Spróbowałem jednak napisać takie coś w bashu, na razie bez interfejsu graficznego:
#!/bin/bash
echo "Podaj nazwę pliku wyjściowego RAR"
read $rar
echo "Teraz podaj nazwy plików do dodania do archiwum oddzielone spacjami"
read $plik
rar a -m0 -s -v209715200b $rar $plik
fi
done Ale wywala helpa programu rar (jakby był jakiś błąd w ostatecznym poleceniu):
janek@localhost:~$ ./pakowacz.sh
Podaj nazwę pliku wyjściowego RAR
archiwum.rar
Teraz podaj nazwy plików do dodania do archiwum oddzielone spacjami
vty-ssoc.iso

RAR 3.80  Copyright (c) 1993-2008 Alexander Roshal  16 Sep 2008
Shareware version        Type RAR -? for help

Usage:    rar <command> -<switch 1> -<switch N> <archive> <files...>
              <@listfiles...> <path_to_extract\>

<Commands>
  a            Add files to archive
  c            Add archive comment
  cf            Add files comment
  ch            Change archive parameters
  cw            Write archive comment to file
  d            Delete files from archive
  e            Extract files to current directory
  f            Freshen files in archive
  i[par]=<str>  Find string in archives
  k            Lock archive
  l[t,b]        List archive [technical, bare]
  m[f]          Move to archive [files only]
  p            Print file to stdout
  r            Repair archive
  rc            Reconstruct missing volumes
  rn            Rename archived files
  rr[N]        Add data recovery record
  rv[N]        Create recovery volumes
  s[name|-]    Convert archive to or from SFX
  t            Test archive files
  u            Update files in archive
  v[t,b]        Verbosely list archive [technical,bare]
  x            Extract files with full path

<Switches>
  -            Stop switches scanning
  ad            Append archive name to destination path
  ag[format]    Generate archive name using the current date
  ap<path>      Set path inside archive
  as            Synchronize archive contents
  av            Put authenticity verification (registered versions only)
  av-          Disable authenticity verification check
  c-            Disable comments show
  cfg-          Disable read configuration
  cl            Convert names to lower case
  cu            Convert names to upper case
  df            Delete files after archiving
  dh            Open shared files
  ds            Disable name sort for solid archive
  dw            Wipe files after archiving
  e[+]<attr>    Set file exclude and include attributes
  ed            Do not add empty directories
  en            Do not put 'end of archive' block
  ep            Exclude paths from names
  ep1          Exclude base directory from names
  ep3          Expand paths to full including the drive letter
  f            Freshen files
  hp[password]  Encrypt both file data and headers
  id[c,d,p,q]  Disable messages
  ierr          Send all messages to stderr
  ilog[name]    Log errors to file (registered versions only)
  inul          Disable all messages
  isnd          Enable sound
  k            Lock archive
  kb            Keep broken extracted files
  m<0..5>      Set compression level (0-store...3-default...5-maximal)
  mc<par>      Set advanced compression parameters
  md<size>      Dictionary size in KB (64,128,256,512,1024,2048,4096 or A-G)
  ms[ext;ext]  Specify file types to store
  n<file>      Include only specified file
  n@            Read file names to include from stdin
  n@<list>      Include files in specified list file
  o[+|-]        Set the overwrite mode
  ol            Save symbolic links as the link instead of the file
  or            Rename files automatically
  ow            Save or restore file owner and group
  p[password]  Set password
  p-            Do not query password
  r            Recurse subdirectories
  r0            Recurse subdirectories for wildcard names only
  rr[N]        Add data recovery record
  rv[N]        Create recovery volumes
  s[<N>,v[-],e] Create solid archive
  s-            Disable solid archiving
  sc<chr>[obj]  Specify the character set
  sfx[name]    Create SFX archive
  si[name]      Read data from standard input (stdin)
  sl<size>      Process files with size less than specified
  sm<size>      Process files with size more than specified
  t            Test files after archiving
  ta<date>      Process files modified after <date> in YYYYMMDDHHMMSS format
  tb<date>      Process files modified before <date> in YYYYMMDDHHMMSS format
  tk            Keep original archive time
  tl            Set archive time to latest file
  tn<time>      Process files newer than <time>
  to<time>      Process files older than <time>
  ts<m,c,a>[N]  Save or restore file time (modification, creation, access)
  u            Update files
  v            Create volumes with size autodetection or list all volumes
  v<size>[k,b]  Create volumes with size=<size>*1000 [*1024, *1]
  ver[n]        File version control
  vn            Use the old style volume naming scheme
  vp            Pause before each volume
  w<path>      Assign work directory
  x<file>      Exclude specified file
  x@            Read file names to exclude from stdin
  x@<list>      Exclude files in specified list file
  y            Assume Yes on all queries
  z[file]      Read archive comment from file
./pakowacz.sh: line 8: syntax error near unexpected token `fi'
./pakowacz.sh: line 8: `fi'
janek@localhost:~$ Czy ja wogóle dobrze rozumuję?



grucha - 29-03-2009 15:12
Hmm może wystarczą same akcje? Sprawdź czy twój menadżer plików obsługuje akcje [Thunar i Nautilus na pewno to robią]. Przykładowo dla Thunara skonfigurowanie takiej akcji:
rar a -m0 -s -v209715200b %n.rar %N Spowoduje, że po jej wybraniu utworzone zostanie archiwum o nazwie takiej jak pierwszy z zaznaczonych plików + rozszerzenie rar, zawierające wszystkie zaznaczone pliki, dodatkowo zostanie podzielone na woluminy po 200 mega.



mekosx - 29-03-2009 15:59

Hmm może wystarczą same akcje? Sprawdź czy twój menadżer plików obsługuje akcje [Thunar i Nautilus na pewno to robią]. Przykładowo dla Thunara skonfigurowanie takiej akcji:
rar a -m0 -s -v209715200b %n.rar %N
Spowoduje, że po jej wybraniu utworzone zostanie archiwum o nazwie takiej jak pierwszy z zaznaczonych plików + rozszerzenie rar, zawierające wszystkie zaznaczone pliki, dodatkowo zostanie podzielone na woluminy po 200 mega. A jak się to konfiguruje? Używam nautilusa.



grucha - 29-03-2009 16:16
W Gnome: System/Preferencje/Nautilus Actions Configurator, albo wywołać poleceniem: nautilus-actions-config
Nie używam Nautilusa, więc nie wiem czy ta akcja będzie wyglądać identycznie czy nieco inaczej, w każdym razie jakaś informacja które zmienne jak się oznacza powinna tam być. Skonfigurowane akcje będą dostępne pod prawym klawiszem.



mekosx - 29-03-2009 17:27
Zrobiłem coś takiego, ale po kliknięciu nic się nie wyświetla, ani w katalogu z plikiem nic się nie pojawia:
http://www.lookpic.com/files/rar.png

Pomyślałem, że może trzeba odpalić to w okienku terminala, ale taka kombinacja też nie działa, wyświetla się okienko xterm ale zaraz znika:
http://www.lookpic.com/files/rar2.png

Tak wygląda legenda:
http://www.lookpic.com/files/leg.png



Akkon - 29-03-2009 22:42

Z tego co wiem chyba żadna nakładka graficzna dla linuxa nie istnieje, Krusader obsługuje i kilka innych też.
http://debian.linux.pl/viewtopic.php...&highlight=rar



grucha - 30-03-2009 01:54
Hmmm akcja wydaje się być poprawna, choć może niech lepiej wypowie się osoba używająca Nautilusa.



tydell - 30-03-2009 08:09
Co do akcji to zmienna path. Wpisz zamiast ,,rar'' pełną ścieżkę do tego programu, czyli pewnie jakieś /usr/bin/... itd.



mekosx - 30-03-2009 08:52

Z tego co wiem chyba żadna nakładka graficzna dla linuxa nie istnieje, Krusader obsługuje i kilka innych też.
http://debian.linux.pl/viewtopic.php...&highlight=rar ÂŁał, ten program który tam jest podany akurat dla mnie nie pasuje (jest pod KDE), ale ten skrypt basha jest świetny, działa świetnie :-P
Dzięki
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • minister.pev.pl

  •  

     


     

     
    Copyright 2003. MĂłj serwis