Ecco 3 possibilità che potrebbero funzionare per te:
1. BSD xargs
Questo è incorporato in MacOS, ma ti chiederà di citare i nomi dei file in list-of-files
$ more list-of-files
'file1'
'file2'
'file 3'
'file 4'
nota: ho aggiunto l'opzione -t
per mostrare il comando generato prima che venga eseguito.
$ cat list-of-files | xargs -t -I {} echo "{}"
echo file1
file1
echo file2
file2
echo file 3
file 3
echo file 4
file 4
2. GNU xargs
GNU xargs non è installato su MacOS per impostazione predefinita, ma può essere installato tramite homebrew (nel pacchetto findutils).
brew install findutils
L'uso di GNU xargs tramite homebrew non richiede di citare i nomi dei file, e darebbe lo stesso risultato dell'uso di xargs BSD, e citando i nomi dei file (opzione 1, sopra).
3. trova (anziché list-of-files
)
Invece di usare un file per il tuo input, usa il comando find
. Qualcosa come il seguente dovrebbe funzionare:
$ ls -laF file*
-rw-r--r-- 1 sfederman staff 0 Jun 7 22:53 file 4
-rw-r--r-- 1 sfederman staff 0 Jun 7 22:53 file 3
-rw-r--r-- 1 sfederman staff 0 Jun 7 22:53 file1
-rw-r--r-- 1 sfederman staff 0 Jun 7 22:53 file2
$ find . -name "file*" | xargs -0 -I {} echo "{}"
./file 4
./file 3
./file1
./file2
Oppure, evitando completamente xarg:
$ find . -name "file*" -exec echo "{}" \;
./file 4
./file1
./file2
./file 3