PDA

Visualizza la versione completa : [pigrizia] concatenare tutti i files di una cartella


gulpgiulia
27-02-2007, 19:56
Ciao a tutti, come da oggetto, e dettato da pigrizia.
Devo concatenare tutti i files contenuti in una cartella (sono tutti files dello stesso tipo, binary files) in modo da formare un unico file "grosso".
Il probl e' che nella cartella ci sono 77 files, e io devo concatenarli tutti!!!
Esiste una "scorciatoia" che faccia le cose in automatico (invece di cat file0000000.dat file000000.dat ...ecc per 77 volte ecc >filelungo.dat, che se faccio cosi' scrivo una linea di comando lunghissima e rischio pure di sbagliarmi)

Grazie!

albgen
27-02-2007, 20:53
fai uno script che ha un ciclo che chiama sempre il comando che manda l'output nel file cambiando l'indice del file
:master:


cmq guarda un esempio di ciclo come script linux
http://www.freeos.com/guides/lsst/ch03sec06.html

gulpgiulia
27-02-2007, 21:26
... avevo immaginato che la soluzione era uno script... ma la mia shell e' tcshrc... mentre il link che mi hai indicato e' ok per bash... conosci un link simile per tcshrc?

Mi hanno anche suggerito di scrivere un programmino in C/C++ con la funzione system(), ma mi sembra piu' complicato, anche perche' non ho molta familiarita' con questa funzione... tanto per cominciare, io dovrei utilizzare nel ciclo una variabile intera il cui valore sia il numero di file *.DAT contenuti nella directory, ovvero l'uscita del comando "ls *.DAT | wc -w". Ad es.

#include <stdlib.h>
#include <iostream>
using namespace std;
main(){
int index=1;
system ("ls *.DAT | wc -w");
while (index<"uscita del comando ls *.DAT | wc -w"){ecc ecc
}
return(0);
}

Insomma, come posso utilizzare l'uscita del comando ls *.DAT | wc -w come variabile di controllo del ciclo?

P.S. Se qualcuno ha gia' la soluzione bella e pronta... e' molto molto molto gradita !!! ;-)

cacao74
27-02-2007, 22:48
io non sono pratico e non sono bravo con gli script, quindi ti direi di provare cosi':


$ cat ./* > file_concatenato

:madai!?:

billiejoex
28-02-2007, 15:14
Che intendi con 'concatenare'?
Ipotizzando i file A,B,C,D vuoi che B sia aggiunto in coda ad A e C in coda ad A e cosė via?

PinguinoGoloso
28-02-2007, 15:25
cat *.* >> GRANDE_FILE_BINARIO
Dovrebbe funzionare su tutte le shell POSIX.

gulpgiulia
05-03-2007, 15:44
grazie a tutti per i vostri suggerimenti!
Mi hanno consigliato anche
cat `ls *.DAT` > lungo.dat

In effetti, questa istruzione, come anche quelle da voi proposte, creano un unico file, ma come posso essere sicura dell'ordine con cui i file vengono concatenati? A quanto pare, avendo eseguito alcune prove, si tratta dell'ordine alfabetico del nome del file. Qualcuno lo puo' confermare? Nel mio caso, devo ordinare dei file numerati in esadecimale
00000001.DAT 00000019.DAT 00000028.DAT
00000002.DAT 0000001d.DAT 0000002d.DAT
00000012.DAT 00000021.DAT 00000033.DAT

Posso stare tranquilla che la concatenazione avviene nell'ordine corretto?

stai_tranquillo
05-03-2007, 17:42
cat `ls *.DAT` > lungo.dat

prende i files dall'elenco generato con ls, che di default fa un sort alfabetico ascendente per filename..

fai ls e guarda se l'ordine ti va bene

Loading