Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

script bash

1 view
Skip to first unread message

elena

unread,
Dec 22, 2009, 1:35:21 PM12/22/09
to

SCRIPTING BASH


ciao a tutti.
studio con lena, ma alcuni argomenti ancora non li ho affrontati.
dovrei creare una directory ed al suo interno altre 5000 directory,
numerate progressivamente come segue:

0001
0002
0003
0004
0005
0006

[.....]

5000

sareste cosi' gentili da indicarmi una traccia su cosa studiare? i cicli
della bash li ho visti in modo raffazzonato, pero' le directory che creo
prendono la seguente numerazione:

1
2
3
4
5
6
[..]
10
11
12
13
14


e cosi' via.
la mia necessita' e' avere il numero sequenziale di 4 cifre, con gli zeri
per la parte non significativa.

GRAZIE

RedWiz

unread,
Dec 22, 2009, 2:28:19 PM12/22/09
to
Il Tue, 22 Dec 2009 18:35:21 +0000, elena ha scritto:

> la mia necessita' e' avere il numero sequenziale di 4 cifre, con gli
> zeri per la parte non significativa.


un esempio da mettere nel ciclo:
mkdir `printf "%04d" 1`


crea la dir 0001

Fi3rizi0

unread,
Dec 22, 2009, 2:28:57 PM12/22/09
to
Il giorno 22 Dec 2009 18:35:21 GMT
elena <el...@itaglia.it> ha scritto:

man seq
in particolare l'opzione -w

seq -w 5000

> GRAZIE
>

antani

unread,
Dec 22, 2009, 3:04:40 PM12/22/09
to
elena wrote:

Con bash 4, puoi fare

mkdir {0001..4000}

oppure se hai ancora bash 3

mkdir $(printf '%04d\n' {1..4000})

Nota: in generale questi metodi possono dare problemi. Per questo specifico
problema, dovrebbero essere ok.

MoonChild

unread,
Dec 22, 2009, 3:13:51 PM12/22/09
to
Il Tue, 22 Dec 2009 18:35:21 +0000, elena ha scritto:

> SCRIPTING BASH

se non ho capito male vuoi questo:

# i=1; while [ $i -le 5000 ]; do mkdir `printf %04d $i`; i=$[$i + 1]; done

Ciao,
--
MoonChild
Togliere nospam per l' esatta e-mail

mallin.shetland

unread,
Dec 22, 2009, 8:22:12 PM12/22/09
to
Addì martedì 22 dicembre 2009 21:04 antani scrisse:

> mkdir $(printf '%04d\n' {1..4000})
>
> Nota: in generale questi metodi possono dare problemi. Per questo
> specifico problema, dovrebbero essere ok.

con quattro o cinquemila file o directory *possono* dare problemi?
Sbagliato!
La frase giusta è: *SICURAMENTE* ci saranno problemi. Anzi i
problemi si incominciano ad avere con già due o trecento argomenti.



mallin.shetland

unread,
Dec 22, 2009, 8:25:45 PM12/22/09
to
seq -w 0 5000 | xargs mkdir

Non testato!

antani

unread,
Dec 23, 2009, 3:27:34 PM12/23/09
to
mallin.shetland wrote:

Magari provare prima di parlare...

Facciamo un po' di conti (che avresti dovuto fare tu prima di postare, ma
che te lo dico a fa'...forse e' troppo, in fondo siamo su .iniziare). Il
comando e' "mkdir", con 4000 argomenti, di 4 byte ciascuno, piu' un byte di
terminazione per ogni argomento (il \0).

Lunghezza totale della riga di comando: 5*4000 + 5 = 20005.

OMG, BEN 20005 BYTES!!!!!!!!!!!!!!

Oh, e poi bisogna includere anche l'environment:

$ env | wc -c
3918

20005 + 3918 = 23923

OMGOMGOMG!!!!! 23923 BYTES!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Sicuramente sono troppi, verifichiamo:

$ getconf ARG_MAX
2097152

uhm, beh si', pero' magari non sono tutti cosi', proviamo su quel vecchio
server di 6 anni fa con bash-2.05:

$ getconf ARG_MAX
131072

beh dai, ma quello e' un server, proviamo su una macchina virtuale OpenBSD:

$ getconf ARG_MAX
262144

beh...magari i sistemi che hanno un ARG_MAX minore di quello che ci serve in
questo caso esistono, non lo metto in dubbio, ma non credo certo che siano
la maggioranza.

Per cui ribadisco cio' che avevo gia' detto, e sottolineo la frase "PER
QUESTO SPECIFICO PROBLEMA" e "DOVREBBERO essere ok", per coloro a cui magari
sono "inavvertitamente" sfuggite, e che magari vogliono rispondere con
affermazioni generali.

mallin.shetland

unread,
Dec 23, 2009, 4:36:12 PM12/23/09
to
Addì mercoledì 23 dicembre 2009 21:27 antani scrisse:

> $ getconf ARG_MAX
> 2097152

Effettivamente pensavo che il limite fosse molto minore,
diciamo 15 o 20 K. Il brutto pero è che anche con 20 K
si possono creare circa 4500 file. Mea culpa

Antonio Macchi

unread,
Dec 26, 2009, 3:39:36 AM12/26/09
to
> oppure se hai ancora bash 3
>
> mkdir $(printf '%04d\n' {1..4000})


$ mkdir 000{0..9} 00{10..99} 0{100..999} {1000..4000}

0 new messages