Estrarre la lista su txt di tutti i war e jar files

Ciao a tutti,
Potete suggerirmi un comando che cerchi tutti jar e war files presenti nel sistema?

L’ideale sarebbe una lista su txt file da salvare sulla mia home dir, tenendo conto che non conosco il path dove questi files potrebbero essere e che locate non e’ installato in molte macchine.

Grazie :slight_smile:

Questo potrebbe andare bene?

# find / -type f -name *.jar -or -name *.war 2>/dev/null

Ciao frafra, grazie del suggerimento, ho optato in questo modo sulla base del tuo

[code]for i in find / -type f -name *.jar -or -name *.war; do
echo $(du -m $i|awk ‘{print $1}’) $(dirname $i) $(basename $i)> :)war_jar_list.txt

done

[/code]

mi da un file di testo con il path e il file, grazie ancora :slight_smile:

Di nulla. Tieni conto che se usi “>” vai a sovrascrivere il file, serve “>>” per l’append.

Personalmente non mi piace mischiare i cicli for con find. O uso for+globstar o solo find con l’opzione exec oppure con xargs.

Quello che hai fatto tu si può fare facilmente usando esclusivamente find:

find / -type f \( -name *.jar -or -name *.war \) -printf '%s %p\n' > jar_war_list.txt

In Bash 4 puro diventa (scritto in maniera un po’ compatta):

(shopt -s globstar #dotglob per includere anche file/directory nascoste for f in /{,**/}*.{j,w}ar; do -f $f ] && du -m "$f" done) > jar_war_list.txt

Se poi vuoi cercare tra i risultati il file che ti interessa, non serve fare magheggi con awk/dirname/basename, puoi fare qualcosa di più semplice, tipo:

grep "file.jar$" jar_war_list.txt

[quote=frafra]Di nulla. Tieni conto che se usi “>” vai a sovrascrivere il file, serve “>>” per l’append.

Personalmente non mi piace mischiare i cicli for con find. O uso for+globstar o solo find con l’opzione exec oppure con xargs.

Quello che hai fatto tu si può fare facilmente usando esclusivamente find:

find / -type f \( -name *.jar -or -name *.war \) -printf '%s %p\n' > jar_war_list.txt

In Bash 4 puro diventa (scritto in maniera un po’ compatta):

(shopt -s globstar #dotglob per includere anche file/directory nascoste for f in /{,**/}*.{j,w}ar; do -f $f ] && du -m "$f" done) > jar_war_list.txt

Se poi vuoi cercare tra i risultati il file che ti interessa, non serve fare magheggi con awk/dirname/basename, puoi fare qualcosa di più semplice, tipo:

grep "file.jar$" jar_war_list.txt

Ciao frafra,
Grazie del suggerimento, non sono molto esperto di scripting purtroppo,
Riguardo a: Di nulla. Tieni conto che se usi “>” vai a sovrascrivere il file, serve “>>” per l’append.

Intendi che ho sovrascritto i file che ho cercato? o il file di output?

Figurati.

Intendo dire che se in un ciclo for lanci un comando che scrive su un file usando “>”, questo file viene riscritto ad ogni ciclo:

$ for i in {1..3}; do echo $i > test.txt; done $ cat test.txt 3

Guarda considera che era solo per cercare velocemente files per un collega che non ha accesso ad alcune macchine che gestisco.

Domani voglio riprovare col tuo

(shopt -s globstar #dotglob per includere anche file/directory nascoste for f in /{,**/}*.{j,w}ar; do -f $f ] && du -m "$f" done) > jar_war_list.txt

Giusto per essere sicuro di aver estratto tutto

Grazie ancora :slight_smile:

Sì, sì, io te le dico un po’ tutte, perché l’argomento mi interessa.

Secondo me lo script che hai incollato contiene un refuso, anche perché non viene eseguito correttamente. Probabilmente al posto di “> :)” ci stava “>>”.