Bash: copie una lista de archivos que contienen (muchos) caracteres especiales

Bash: copie una lista de archivos que contienen (muchos) caracteres especiales

Sé muy bien cómo copiar simplemente una lista de archivos a otra ubicación usando bash, pero el problema es que mi lista de archivos contiene nombres de archivos que contienen casi TODOS los caracteres que deben escaparse en bash. Hay toneladas de espacios, !, ",", "'", ?, y casi todos los demás caracteres que se te ocurran y de los que es necesario escapar.

Inicialmente me cansé de revisar el archivo de texto y escapar de todos estos caracteres, pero es... agotador, incluso con la búsqueda y el reemplazo (sin embargo, eso SÍ funciona) (lo probé con una lista de archivos mucho más pequeña). También intenté agregar un solo archivo. comillas en el archivo de texto antes y después de la ruta, pero eso no funciona. También intenté agregar comillas simples antes y después del % después de cp, pero obviamente no tengo idea de lo que estoy haciendo. :) (Sé que tendría que evitar las comillas simples en el archivo de texto si de alguna manera rodeara la ruta del archivo con comillas simples).

Estoy usando este comando para copiar la lista de archivos a otra ubicación, pero nuevamente, no funciona con caracteres especiales.

cat file.txt | xargs -J % cp % ./folderToMoveto/

Sé que hay otros comandos que hacen lo mismo sin tener que canalizar nada a xargs, y algunas respuestas aquí dicen que xargs puede hacerlo por sí solo, pero no he logrado que funcionen, mientras que el anterior sí funciona.

Además, estoy en OS X.

Respuesta1

GNU xargs tiene una -0opción que le permite leer datos delimitados por bytes nulos. En Linux, puedes hacer:

tr '\n' '\0' < file.txt | xargs -0 cp -t /folder/to/move/to

Lamentablemente, Apple ha desconectado su antiguo sitio de páginas de manual de Darwin, por lo que no puedo comprobar si existe un equivalente para MacOS.

información relacionada