|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Oct 2004
Messaggi: 81
|
Shell unix per ordinare file in cartelle
Buongiorno a tutti,
dovrei creare una shell unix che analizza il contenuto di una cartella e ordina i vari file in sottocartelle. Ad es nella cartella sono presenti i file a1.txt, a2.txt, b1.txt il risultato sarebbe avere i file 'a' tutti dentro la sottocartella 'filea' e i file 'b' tutti dentro la sottocartella 'fileb'. E' possibile una cosa del genere, se si come?!? Grazie |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Nov 2007
Città: Ginevra
Messaggi: 256
|
Cosa intendi per creare una shell unix?
Scrivere una shell da 0 che ti permetta di fare cio' che dici tu, o uno script per una shell gia' esistente (es bash) ? |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Oct 2004
Messaggi: 81
|
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Nov 2006
Messaggi: 557
|
|
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Oct 2004
Messaggi: 81
|
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: May 2004
Messaggi: 13037
|
Ciao,
quello che ti serve è uno "script" (o un programma se preferisci) che esegua le operazioni che ti servono. La "shell" è l'ambiente dentro il quale il programma (o script) viene eseguito. Ciao M. PS: per i puristi, non vogliatemene se ho usato un linguaggio "scorretto"... ![]()
__________________
"Qualunque cosa abbia il potere di farti ridere ancora trent'anni più tardi non è uno spreco di tempo. Credo che le cose di quella categoria si avvicinino molto all'immortalità" |
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Nov 2007
Città: Ginevra
Messaggi: 256
|
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Dec 2000
Città: Trento
Messaggi: 5917
|
ti posto una cosa che mi e' venuta di getto (non l'ho testato, quindi potrei aver fatto qualche cazzata, ma l'idea di base c'e')...
ma ovviamente ti consiglio di studiarti almeno un pelino di bash (almeno sapere cos'e' una shell e cosa uno script!) Codice:
#!/bin/bash for file in $(ls *.txt) do directory=file$(echo $file | cut -c 1) mkdir -p $(pwd)/$directory mv $file $directory/ done ma adesso vado ad allenamento... magari posto piu' tardi! ok avevo 5 minuti ![]() Codice:
#!/bin/bash for letter in $(ls *.txt | cut -c 1 | uniq) do mkdir -p ./file$letter mv $letter*.txt ./file$letter done
__________________
Linux User #272700 >+++++++++[<+++++++++>-]<+.++.>++++[<---->-]<++.+++++++. HOWTO: SSH Firewall e DMZ ɐɹdosoʇʇos oʇuǝs ıɯ Ultima modifica di HexDEF6 : 27-10-2008 alle 19:26. |
![]() |
![]() |
![]() |
#9 | |
Member
Iscritto dal: Oct 2004
Messaggi: 81
|
Quote:
Ed è appunto un prgetto universitario! Ci provo subito, grazie mille Ps.: un ulteriore precisazione i nome dei file è a0001.txt .. a0011.txt e la cartella per uno sarà cartella1 mentre per l'altro cartella11. Ultima modifica di power83 : 28-10-2008 alle 16:57. |
|
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Dec 2000
Città: Trento
Messaggi: 5917
|
Quote:
ovviamente per suggerimenti e spiegazioni, ti do' una mano volentieri... magari studia un attimo e poi posta il tuo script (con spiegazione di quello che vuoi fare quasi riga per riga) e noi ti diamo una mano a sistemare! buon lavoro!
__________________
Linux User #272700 >+++++++++[<+++++++++>-]<+.++.>++++[<---->-]<++.+++++++. HOWTO: SSH Firewall e DMZ ɐɹdosoʇʇos oʇuǝs ıɯ |
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Nov 2002
Città: Morbegno (SO)
Messaggi: 1410
|
Quote:
per policy, questi post dovrebbero essere corredati dal codice che uno prova a scrivere.
__________________
e' difficile cio' che non si conosce Tic Tac Andrew Morton, 15/02/2008 LKML:"`tmp' is an awful identifier, and renaming it to `temp' hardly improves it." Ultima modifica di Mason : 28-10-2008 alle 23:37. |
|
![]() |
![]() |
![]() |
#12 |
Member
Iscritto dal: Oct 2004
Messaggi: 81
|
|
![]() |
![]() |
![]() |
#13 |
Member
Iscritto dal: Oct 2004
Messaggi: 81
|
Ciao a tutti,
grazie ai vostri consigli e al manuale sono riuscito a fare tutto il progetto e non solo la piccola parte di cui chiedevo! Mi sono restati due dubbi: 1) substring: sui vari manuali ho trovato questo codice: stringZ=abcABC123ABCabc echo `expr match "$stringZ" 'abc[A−Z]*.2'` echo `expr "$stringZ" : 'abc[A−Z]*.2'` Provando ad eseguirlo l'output a video sono giustamente due 8...in quanto la stringa abc o ABC è ripetuta 4 volte. Ma non ne esiste un substring che faccia una cosa del genedere: stringZ=abcABC123ABCabc echo substr($stringZ,6,3) Il cui output a video sarà in questo caso 123. 2) raplace: in questo caso, sempre sui manuali, ho trovato che il replace si può fare con le seguenti istruzioni: stringZ=abcABC123ABCabc echo ${stringZ/#abc/XYZ} echo ${stringZ/%abc/XYZ} In entrambi i casi il risultato è bad substitution. Quindi come posso sostituire una parte di da una stringa, esempio: stringZ=abcABC123ABCabc echo replace($stringZ,abc,'') Il cui output a video sarà in questo caso ABC123ABC. Scusate le domande sicuramente banali ma è la prima volta che mi "scontro" con questo modo di scrivere programmi. Grazie mille |
![]() |
![]() |
![]() |
#14 | ||
Senior Member
Iscritto dal: Dec 2000
Città: Trento
Messaggi: 5917
|
Quote:
echo ${stringZ:6:3} Quote:
perche' le sostituzioni funzionano proprio cosi! stringZ=abcABC123ABCabc echo ${stringZ/#abc/XYZ} il risultato sara' : XYZABC123ABCabc il # davanti indica che fara' la sostituzione solo se abc e' all'inizio della stringa echo ${stringZ/%abc/XYZ} il risultato sara': abcABC123ABCXYZ il % sta ad indicare che la sostituzione verra' fatta solo se la fine della stringa e' abc se invece vuoi sostituire tutte le ricorrenze devi fare: echo ${stringZ//abc/XYZ} XYZABC123ABCXYZ o se metti: echo ${stringZ//abc/} otterrai: ABC123ABC spero di aver chiarito!
__________________
Linux User #272700 >+++++++++[<+++++++++>-]<+.++.>++++[<---->-]<++.+++++++. HOWTO: SSH Firewall e DMZ ɐɹdosoʇʇos oʇuǝs ıɯ |
||
![]() |
![]() |
![]() |
#15 |
Member
Iscritto dal: Oct 2004
Messaggi: 81
|
Ok, tutto chiaro...solo che sia per
echo ${stringZ:6:3} che per echo ${stringZ//abc/} il risultato è ${stringZ:6:3}: bad substitution ${stringZ//abc/}: bad substitution Grazie mille per la spiegazione |
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: Dec 2000
Città: Trento
Messaggi: 5917
|
Quote:
che shell? perche' queste funzionano sicuramente sotto bash (le ho provate proprio adesso!)... ma magari sotto qualche altra shell no... prima di lanciare uno di questi script lancia: bash e poi vai con lo script
__________________
Linux User #272700 >+++++++++[<+++++++++>-]<+.++.>++++[<---->-]<++.+++++++. HOWTO: SSH Firewall e DMZ ɐɹdosoʇʇos oʇuǝs ıɯ |
|
![]() |
![]() |
![]() |
#17 |
Member
Iscritto dal: Oct 2004
Messaggi: 81
|
SunOS 5.8
Neanche sotto bash funzionano: bash-2.03$ prova.sh file_0001.txt file_0011.dat file_0012.dat /shell/prova.sh[34]: ${stringZ:6:3}: bad substitution bash-2.03$ Grazie |
![]() |
![]() |
![]() |
#18 | |
Senior Member
Iscritto dal: Dec 2000
Città: Trento
Messaggi: 5917
|
Quote:
e infatti nel mio caso: $ bash --version GNU bash, version 3.2.39(1)-release (i486-pc-linux-gnu) Copyright (C) 2007 Free Software Foundation, Inc.
__________________
Linux User #272700 >+++++++++[<+++++++++>-]<+.++.>++++[<---->-]<++.+++++++. HOWTO: SSH Firewall e DMZ ɐɹdosoʇʇos oʇuǝs ıɯ |
|
![]() |
![]() |
![]() |
#19 |
Member
Iscritto dal: Oct 2004
Messaggi: 81
|
Infatti noi abbaimo una misera version 2.03.0(1)-release...
![]() Secondo te ci sono alternative?!? Grazie |
![]() |
![]() |
![]() |
#20 | |
Senior Member
Iscritto dal: Dec 2000
Città: Trento
Messaggi: 5917
|
Quote:
vedo se magari trovo la versione dell'advanced bash scripting guide per la bash 2 dovresti trovarti la guida alla versione 2.8 dalla 3 in poi inizia a parlare anche di bash 3
__________________
Linux User #272700 >+++++++++[<+++++++++>-]<+.++.>++++[<---->-]<++.+++++++. HOWTO: SSH Firewall e DMZ ɐɹdosoʇʇos oʇuǝs ıɯ Ultima modifica di HexDEF6 : 30-10-2008 alle 11:31. |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:24.