[BASH] Come fare il paste di tutti i file in una cartella
[BASH] Come fare il paste di tutti i file in una cartella
Ciao ragazzi, stavo realizzando uno script e mi chiedevo se era possibile fare il paste di tutti i file in una cartella, senza che io so ne quanti ne quali sono questi file.
grazie a tutti in anticipo per le risposte!
grazie a tutti in anticipo per le risposte!
- thece
- Tenace Tecnocrate
- Messaggi: 12949
- Iscrizione: lunedì 23 aprile 2007, 14:16
- Distribuzione: Debian 12 (Bookworm) - KDE
Re: [BASH] Come fare il paste di tutti i file in una cartell
cosa intendi esattamente per paste? del nome del file o del suo contenuto? E soprattutto dove? in un altro file oppure nella clipboard del tuo DE?
Re: [BASH] Come fare il paste di tutti i file in una cartell
per paste intendo il comando, cioè l'unione dei file riga per riga (del contenuto dei file).
Devo stampare il tutto nella shell
Devo stampare il tutto nella shell
- thece
- Tenace Tecnocrate
- Messaggi: 12949
- Iscrizione: lunedì 23 aprile 2007, 14:16
- Distribuzione: Debian 12 (Bookworm) - KDE
Re: [BASH] Come fare il paste di tutti i file in una cartell
Codice: Seleziona tutto
#!/bin/bash
if [[ -z "$1" ]]; then
echo "Error: argument is empty"
exit 1
fi
if [[ ! -d "$1" ]]; then
echo "Error: $1 is not a directory"
exit 1
fi
cd "$1"
for ITEM in *; do
if [[ -f "$ITEM" ]]; then
cat "$ITEM"
fi
done
exit 0
Re: [BASH] Come fare il paste di tutti i file in una cartell
non penso ci siamo capiti
Io ho dei file in una cartella, ma non conosco il loro nome, devo prodere tutti questi file e fare l'unione RIGA PER RIGA!
ex:
file1:
1
2
3
5
file2:
2
5
8
7
unione:
1 2
2 5
3 8
5 7
Grazie per la risposta
Io ho dei file in una cartella, ma non conosco il loro nome, devo prodere tutti questi file e fare l'unione RIGA PER RIGA!
ex:
file1:
1
2
3
5
file2:
2
5
8
7
unione:
1 2
2 5
3 8
5 7
Grazie per la risposta
- thece
- Tenace Tecnocrate
- Messaggi: 12949
- Iscrizione: lunedì 23 aprile 2007, 14:16
- Distribuzione: Debian 12 (Bookworm) - KDE
Re: [BASH] Come fare il paste di tutti i file in una cartell
Ah ... ho capito. Si è sicuramente fattibile ... con uno script o un programmino un pò più complicato ... buon lavoro
Re: [BASH] Come fare il paste di tutti i file in una cartell
a saperlo fare..
- thece
- Tenace Tecnocrate
- Messaggi: 12949
- Iscrizione: lunedì 23 aprile 2007, 14:16
- Distribuzione: Debian 12 (Bookworm) - KDE
Re: [BASH] Come fare il paste di tutti i file in una cartell
Senza alcuna cattiveria, ti rispondo come in passato ho già risposto ad altri utenti in merito a questo genere di richieste: un conto è impiegare 5 / 10 minuti del proprio tempo per suggerire passaggi / soluzioni / idee, un altro conto è impiegare qualche ora per scrivere codice su commissione.
Detto questo, e premesso che non sono un programmatore Bash, per tentare di mitigare il tuo senso di abbandono, ti suggerisco una traccia di quello che io proverei a fare per risolvere il problema:
sembrano quattro istruzioni, ma ti assicuro che non lo sono
Buon lavoro
[EDIT]
Cercando in Rete ho trovato questo comando (paste) che fa proprio quello che cerchi tu
si impara sempre qualcosa di nuovo
[/EDIT]
Detto questo, e premesso che non sono un programmatore Bash, per tentare di mitigare il tuo senso di abbandono, ti suggerisco una traccia di quello che io proverei a fare per risolvere il problema:
Codice: Seleziona tutto
1) fai una scansione della directory TARGET e inserisci in una lista il nome di tutti i file ivi presenti
2) crei un file di testo OUTPUT.txt vuoto
3) per ogni (nome di) file i-esimo contenuto nella lista
3.1) per ogni riga j-esima del file OUTPUT.txt e del file i-esimo, concateni le due righe e sovrascrivi sul file OUTPUT.txt
Buon lavoro
[EDIT]
Cercando in Rete ho trovato questo comando (paste) che fa proprio quello che cerchi tu
Codice: Seleziona tutto
paste file1.txt file2.txt > fileresults.txt
[/EDIT]
- crap0101
- Rampante Reduce
- Messaggi: 8242
- Iscrizione: martedì 30 ottobre 2007, 6:33
- Desktop: LXDE
- Distribuzione: Ubuntu 18.04.1 LTS
- Sesso: Maschile
- Località: TO
- Contatti:
Re: [BASH] Come fare il paste di tutti i file in una cartell
Infatti sono molte menothece [url=http://forum.ubuntu-it.org/viewtopic.php?p=4894038#p4894038][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:[...] ti suggerisco una traccia di quello che io proverei a fare per risolvere il problema:
sembrano quattro istruzioni, ma ti assicuro che non lo sonoCodice: Seleziona tutto
1) fai una scansione della directory TARGET e inserisci in una lista il nome di tutti i file ivi presenti 2) crei un file di testo OUTPUT.txt vuoto 3) per ogni (nome di) file i-esimo contenuto nella lista 3.1) per ogni riga j-esima del file OUTPUT.txt e del file i-esimo, concateni le due righe e sovrascrivi sul file OUTPUT.txt
quello è _proprio_ il comando che Mister80 intendeva utilizzare fin dall'inizio del thread, evidentemente non ha letto il man e nemmeno la sinossi, altrimenti si sarebbe accorto che il "problema" non esiste, quello che vuole fare si fa semplicemente con[EDIT]
Cercando in Rete ho trovato questo comando (paste) che fa proprio quello che cerchi tu
si impara sempre qualcosa di nuovoCodice: Seleziona tutto
paste file1.txt file2.txt > fileresults.txt
Codice: Seleziona tutto
paste *
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
- thece
- Tenace Tecnocrate
- Messaggi: 12949
- Iscrizione: lunedì 23 aprile 2007, 14:16
- Distribuzione: Debian 12 (Bookworm) - KDE
Re: [BASH] Come fare il paste di tutti i file in una cartell
Come debito per avermi fatto scoprire una cosa nuova, mantengo la mia parola.thece [url=http://forum.ubuntu-it.org/viewtopic.php?p=4894038#p4894038][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: ... un conto è impiegare 5 / 10 minuti del proprio tempo per suggerire passaggi / soluzioni / idee, un altro conto ...
Lo script è un pò grezzo: potrebbe essere rifinito molto meglio, ma funziona. L'output finale viene prodotto nel file /tmp/OUTPUT.txt
pasteAllFile.sh
Codice: Seleziona tutto
#!/bin/bash
help ()
{
cat << EOF
DESCRIPTION
?!?
USAGE
pasteAllFile DIRECTORY
EOF
}
OUT_FILE="/tmp/OUTPUT.txt"
TMP_FILE="/tmp/OUTPUT.tmp"
FILE_TYPE=""
if [[ -z "$1" ]]; then
help
exit 1
fi
if [[ ! -d "$1" ]]; then
help
exit 1
fi
if [[ -e "$OUT_FILE" ]]; then
rm "$OUT_FILE"
fi
if [[ -e "$TMP_FILE" ]]; then
rm "$TMP_FILE"
fi
touch "$OUT_FILE"
cd "$1"
for ITEM in *; do
if [[ -f "$ITEM" ]]; then
FILE_TYPE=$(file -b "$ITEM")
if [[ $FILE_TYPE == *"text"* ]]; then
paste "$ITEM" "$OUT_FILE" > "$TMP_FILE"
fi
if [[ -e "$TMP_FILE" ]]; then
mv "$TMP_FILE" "$OUT_FILE"
fi
fi
done
cat "$OUT_FILE"
exit 0
Ultima modifica di thece il mercoledì 29 giugno 2016, 22:14, modificato 3 volte in totale.
- crap0101
- Rampante Reduce
- Messaggi: 8242
- Iscrizione: martedì 30 ottobre 2007, 6:33
- Desktop: LXDE
- Distribuzione: Ubuntu 18.04.1 LTS
- Sesso: Maschile
- Località: TO
- Contatti:
Re: [BASH] Come fare il paste di tutti i file in una cartell
@thece: no, vedi la risposta sopra... btw, lui vuole stampare su stdout
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
- thece
- Tenace Tecnocrate
- Messaggi: 12949
- Iscrizione: lunedì 23 aprile 2007, 14:16
- Distribuzione: Debian 12 (Bookworm) - KDE
Re: [BASH] Come fare il paste di tutti i file in una cartell
Basta aggiungere uncrap0101 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4894060#p4894060][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:@thece: no, vedi la risposta sopra... btw, lui vuole stampare su stdout
Codice: Seleziona tutto
cat /tmp/OUTPUT.txt
@crap0101
Codice: Seleziona tutto
paste *
Vabbè, ho imparato una cosa nuova e ho fatto un pò di esercizio di scripting
- crap0101
- Rampante Reduce
- Messaggi: 8242
- Iscrizione: martedì 30 ottobre 2007, 6:33
- Desktop: LXDE
- Distribuzione: Ubuntu 18.04.1 LTS
- Sesso: Maschile
- Località: TO
- Contatti:
Re: [BASH] Come fare il paste di tutti i file in una cartell
se ci si vuole complicare la vita sì... mi chiedo solo il senso di quelle 30 righe di operazioni inutili quando bastano *due* parole.thece [url=http://forum.ubuntu-it.org/viewtopic.php?p=4894062#p4894062][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:basta aggiungere uncrap0101 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4894060#p4894060][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:@thece: no, vedi la risposta sopra... btw, lui vuole stampare su stdout
finaleCodice: Seleziona tutto
cat /tmp/OUTPUT.txt
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
- thece
- Tenace Tecnocrate
- Messaggi: 12949
- Iscrizione: lunedì 23 aprile 2007, 14:16
- Distribuzione: Debian 12 (Bookworm) - KDE
Re: [BASH] Come fare il paste di tutti i file in una cartell
"Nessuno" o "esercizio di scripting"crap0101 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4894066#p4894066][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: se ci si vuole complicare la vita sì... mi chiedo solo il senso di quelle 30 righe di operazioni inutili quando bastano *due* parole.
Che figuraccia, me lo hai anche scritto
Mister80 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4893984#p4893984][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: per paste intendo il comando, cioè l'unione dei file riga per riga (del contenuto dei file).
- crap0101
- Rampante Reduce
- Messaggi: 8242
- Iscrizione: martedì 30 ottobre 2007, 6:33
- Desktop: LXDE
- Distribuzione: Ubuntu 18.04.1 LTS
- Sesso: Maschile
- Località: TO
- Contatti:
Re: [BASH] Come fare il paste di tutti i file in una cartell
mi ero perso questo: imho, non è una soluzione ardita, ma l'uso normale e previsto del comando; l'unico problema che effettivamente potrebbe presentarsi è se il numero di file è così elevato che supera il numero massimo di argomenti o la lunghezza limitethece [url=http://forum.ubuntu-it.org/viewtopic.php?p=4894062#p4894062][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:[
@crap0101
per quanto possa funzionare, mi sembra molto ardita come soluzione finale. Se i file tirati su non sono tutti file di testo ...Codice: Seleziona tutto
paste *
Vabbè, ho imparato una cosa nuova e ho fatto un pò di esercizio di scripting
Codice: Seleziona tutto
crap0101@orange:/tmp/foo$ getconf ARG_MAX
2097152
Riguardo il _tipo_ di file, mi pare che non sia un problema in questo caso specifico; btw non vedo la cosa implementata nello script che hai proposto, per cui se sei in serata da esercizi, ti direi di aggiungerla! :-)
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
- thece
- Tenace Tecnocrate
- Messaggi: 12949
- Iscrizione: lunedì 23 aprile 2007, 14:16
- Distribuzione: Debian 12 (Bookworm) - KDE
Re: [BASH] Come fare il paste di tutti i file in una cartell
Promosso?crap0101 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4894091#p4894091][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: non vedo la cosa implementata nello script che hai proposto, per cui se sei in serata da esercizi, ti direi di aggiungerla! :-)
Re: [BASH] Come fare il paste di tutti i file in una cartell
@crap0101: grazie mille! Proprio come volevo io!
Grazie anche a @thece!
P.s ti giuro di aver guardato il manuale prima di postare la domanda però non ho trovato l'opzione con l'*
Ad ogni caso, grazie!
Grazie anche a @thece!
P.s ti giuro di aver guardato il manuale prima di postare la domanda però non ho trovato l'opzione con l'*
Ad ogni caso, grazie!
- crap0101
- Rampante Reduce
- Messaggi: 8242
- Iscrizione: martedì 30 ottobre 2007, 6:33
- Desktop: LXDE
- Distribuzione: Ubuntu 18.04.1 LTS
- Sesso: Maschile
- Località: TO
- Contatti:
Re: [BASH] Come fare il paste di tutti i file in una cartell
ma sìthece [url=http://forum.ubuntu-it.org/viewtopic.php?p=4894118#p4894118][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Promosso?crap0101 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4894091#p4894091][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: non vedo la cosa implementata nello script che hai proposto, per cui se sei in serata da esercizi, ti direi di aggiungerla! :-)
però magari posta il codice modificato in un nuovo messaggio senza editare quelli vecchi, altrimenti dopo non si capisce più nulla.
btw, come test per file userei
Codice: Seleziona tutto
[[ $(file -b --mime-type $file) =~ ^text ]]
Ultima modifica di crap0101 il giovedì 30 giugno 2016, 0:16, modificato 1 volta in totale.
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
- thece
- Tenace Tecnocrate
- Messaggi: 12949
- Iscrizione: lunedì 23 aprile 2007, 14:16
- Distribuzione: Debian 12 (Bookworm) - KDE
Re: [BASH] Come fare il paste di tutti i file in una cartell
[quote="crap0101 [img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img]"]
però magari posta il codice modificato in un nuovo messaggio senza editare quelli vecchi, altrimenti dopo non si capisce più nulla.
btw, come test per file userei
però magari posta il codice modificato in un nuovo messaggio senza editare quelli vecchi, altrimenti dopo non si capisce più nulla.
btw, come test per file userei
Codice: Seleziona tutto
[[ $(file -b --mime-type $file) =~ ^text ]][(code]
che, imho, è più intuitivo e comodo da parsare ed eviteri il test sull'esistenza del file temporaneo se non all'inizio, piuttosto si esce con status >0 se il mv dà errore, invece di continuare "silenziosamente" anche quando alcuni dati sono andati perduti.[/quote]
E' free software! Puoi farlo anche tu ;)
- crap0101
- Rampante Reduce
- Messaggi: 8242
- Iscrizione: martedì 30 ottobre 2007, 6:33
- Desktop: LXDE
- Distribuzione: Ubuntu 18.04.1 LTS
- Sesso: Maschile
- Località: TO
- Contatti:
Re: [BASH] Come fare il paste di tutti i file in una cartell
non è un'opzione, è questo:Mister80 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4894157#p4894157][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:@crap0101: grazie mille! Proprio come volevo io!
Grazie anche a @thece!
P.s ti giuro di aver guardato il manuale prima di postare la domanda però non ho trovato l'opzione con l'*
Ad ogni caso, grazie!
Codice: Seleziona tutto
SYNOPSIS
paste [OPTION]... [FILE]...
Poi bè... almeno con paste non ci sono argomenti posizionali per cui puoi anche invertire o mischiare "OPTION" e "FILE", però non tutti i programmi si comportano così, per cui in genere è meglio seguire le istruzioni.
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 9 ospiti