tar-olás 28,400 könyvtárból nem szedi össze a fájlokat?

Fórumok

Sziasztok!

Adott egy OpenSuse szerver. Egy alkalmazás úgy archivál (törlés előtt) egy osztott mappába, hogy adott azonosítóval a mappa alá az azonosítóval létrehoz egy almappát, majd (egyebek mellett) egy .SQL file-t ment bele (ami sima text formátumú). Van ~28,400 ilyen mappa, ugyanennyi SQL file. Egy-egy SQL file mérete 60-150 KB közötti.

Adatokat kell az arcivumból (SQL file-ok) kivadásznom, ehhez kellene az összes SQL file. Beléptem az osztott mappába, majd kiadtam ezt:

find . -name *.SQL | xargs tar cvf FULLSQL.tar

Lefutott szépen, a képernyőn láthatóan az összes mappán végigment és a tar file mérete is hihető lett: 289 MB.

Viszont kicsomagoláskor vagy a tar file tartalmának listázásakor csak az utolsó 2,805 db mappa és file van meg.

Mit cseszek el?

köszönöm

-activer

Hozzászólások

Az xargs speckója ezt írja:

The xargs utility shall construct a command line consisting of the utility and argument operands specified followed by as many arguments read in sequence from standard input as fit in length and number constraints specified by the options. The xargs utility shall then invoke the constructed command line and wait for its completion. This sequence shall be repeated until one of the following occurs: [...]

Magyarul az xargs a megadott parancsot akár többször is lefuttathatja. Most is ez történik, és te a végső FULLSQL.tar állományban csak a legutolsó futás eredményét találod meg.

Használd inkább az alábbi pipeline-t:


find . -name '*.SQL' -type f -print0 \
| tar --null --files-from=- --create --verbose --file=FULLSQL.tar

Első blikkre azt, hogy a -name után a *.sql -t nem tetted idézőjelbe. A többit lacos kollega már vázolta.

Igy meg esetleg gyorsabb:

find . -name "*.SQL" | cpio -o | gzip -9 > FULLSQL.cpio.gz

Nem probaltam ki :)

Köszönöm, hamarosan kipróbálom!

-activer