Ho uno script che scrive solo i dati su stdout
. Ho bisogno di eseguirlo per più file e generare un file di output diverso per ogni file di input e mi chiedevo come usare find -exec
per quello. Così ho praticamente provato diverse varianti di questo (ho sostituito lo script cat
solo per scopi di testabilità):Reindirizzamento dello stdout con find -exec e senza creare una nuova shell
trovare * -type f cat exec "{}"> "{} .stdout" \;
ma non è riuscito a farlo funzionare poiché tutti i dati venivano scritti in un file chiamato letteralmente {}.stdout
.
Alla fine, ho potuto farlo funzionare con:
ritrovamento * -type f exec sh -c "cat {}> {} .stdout" \;
Ma mentre questo ultimo modulo funziona bene con cat
, il mio script richiede variabili d'ambiente caricate attraverso diversi script di inizializzazione, quindi io alla fine con:
ritrovamento * -type f exec sh -c " initscript1; initscript2; ...; myscript {}> {} .stdout "\;
Quale sembra uno spreco perché ho già tutto inizializzato nella mia shell corrente.
C'è un modo migliore per farlo con find
? Altre one-liner sono benvenute.
Se sono inizializzati nella shell originale, ma non sono impostati nella subshell, non sono variabili di ambiente. Scrivi 'set -a' nella parte superiore degli initscript. –
È l'ultimo esempio che fornisci corretto, oppure è il comando: 'find. -tipo f -exec sh -c ". initscript1;. initscript2; ...; myscript {}> {} .stdout" \; '(Invece di invocare semplicemente' initscript1', si sta effettivamente chiamando '. Initscript1', cioè si sta acquisendo il file con il comando punto). –