Aquí hay 3 posibilidades que pueden funcionar para usted:
1. BSD xargs
Esto está incorporado en MacOS, pero requerirá que cite los nombres de los archivos en su list-of-files
$ more list-of-files
'file1'
'file2'
'file 3'
'file 4'
nota: he añadido el -t
para mostrar el comando generado antes de que se ejecute.
$ 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 no está instalado por defecto en MacOS, pero puede instalarse a través de homebrew (en el paquete findutils).
brew install findutils
El uso de GNU xargs a través de homebrew no requeriría citar los nombres de los archivos, y daría el mismo resultado que usar BSD xargs, y citar los nombres de los archivos (opción 1, arriba).
3. encontrar (en lugar de list-of-files
)
En lugar de utilizar un archivo para su entrada, utilice la función find
de mando. Algo como lo siguiente debería funcionar:
$ 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
O bien, evitar completamente los xargs:
$ find . -name "file*" -exec echo "{}" \;
./file 4
./file1
./file2
./file 3
1 votos
Prueba a añadir
-0
al comando xargs. Esto es probablemente una diferencia entre GNU xargs (en Ubuntu) y BSD (en MacOS).1 votos
En realidad,
xargs
(sin-0
) se confunde con cualquier espacios (o algunos otros caracteres) en los nombres de archivos. En su ejemplo, en realidad ve "foo" y "bar" como dos elementos separados (y luegoecho
los empalma con un solo espacio entre ellos). Véase BashFAQ #20: ¿Cómo puedo encontrar y manejar con seguridad los nombres de archivos que contienen nuevas líneas, espacios o ambos? para una buena colección de técnicas.0 votos
Lo siento, debería haber sido más específico. Tengo una lista de archivos en un archivo de texto así que
-0
no es útil por sí mismo. Tal vez necesito algún otro comando para escupir el archivo a insertar\0
¿para las nuevas líneas?2 votos
@gman
tr '\n' '\0' < filenames.txt | xargs -0 ...