Domanda

Mi ha colpito limite di 32.000 sottodirectory di Linux. Essa ha causato problemi con i miei script PHP e non voglio che accada di nuovo.

La soluzione più semplice è quella di avere i miei script PHP controllare il conteggio directory corrente prima di provare a creare un altro sottodirectory.

Tutte le idee che ho visto per eseguire tale verifica comporta iterare su tutta la directory e contando ogni cartella. Considerando la mia preoccupazione è con molto grandi directory, c'è un modo migliore per recuperare il numero di file / cartelle in essa contenuti?

Domanda bonus: c'è anche un modo non iterativo per trovare l'uso del disco di una directory

Grazie in anticipo! Brian

È stato utile?

Soluzione

Un modo migliore è quello di progettare il layout directory in modo non c'è modo che potrai mai avere 32000 file in una singola directory. In effetti, mi piacerebbe suggerire che anche 1000 file in una directory è di troppo.

L'approccio solito prendo a questo problema comporta livelli extra di directory hierarhy. Un modo tipico è quello di prendere i nomi dei file che stai attualmente memorizzando in una singola directory e suddividerlo in pezzi che corrispondono alle directory nidificate. Quindi, se si dispone di un gruppo di file come

xyzzy
foo
bar
blah

si potrebbe infatti memorizzarli come

x/xyzzy
f/foo
b/bar
b/blah

e così via. È possibile estendere questo a più livelli di directory, o utilizzare più di un carattere di dividere le sottodirectory, al fine di scambiare fuori la profondità contro ampiezza di questo approccio.

Probabilmente otterrete suggerimenti che è possibile utilizzare un file di sistema che non ha il limite di file 32k. Personalmente, anche con un tale file system, avrei sempre usare uno schema come sto proponendo qui. E 'quasi impossibile lavorare in modo efficace con gli strumenti della riga di comando nelle directory con molto molto grandi quantità di file (anche ls diventa del tutto ingestibile), e questa sorta di esplorazione manuale è sempre necessaria durante lo sviluppo, il debugging, e spesso di tanto in tanto durante il normale operazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top