Bash: Copie uma lista de arquivos que contêm (muitos) caracteres especiais

Bash: Copie uma lista de arquivos que contêm (muitos) caracteres especiais

Estou bem ciente de como simplesmente copiar uma lista de arquivos para outro local usando o bash, mas o problema é que minha lista de arquivos contém nomes de arquivos que contêm praticamente TODOS os caracteres que precisam ser escapados no bash. Existem muitos espaços, !, ",", "'", ?, e quase todos os outros caracteres que você possa imaginar que precisam ser escapados.

Inicialmente, cansei de examinar o arquivo de texto e escapar de todos esses caracteres, mas é ... exaustivo, mesmo com pesquisa e substituição (no entanto, isso FUNCIONA) (testei com uma lista muito menor de arquivos). citações no arquivo de texto antes e depois do caminho, mas isso não funciona. Também tentei adicionar aspas simples antes e depois de% depois de cp, mas obviamente não tenho ideia do que estou fazendo. :) (Eu sei que teria que escapar de aspas simples no arquivo de texto se de alguma forma cercasse o caminho do arquivo com aspas simples.)

Estou usando este comando para copiar a lista de arquivos para outro local, mas, novamente, ele não funciona com caracteres especiais.

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

Eu sei que existem outros comandos que fazem a mesma coisa sem precisar canalizar nada para o xargs, e algumas respostas aqui dizem que o xargs pode fazer isso sozinho, mas não consegui fazê-los funcionar, enquanto o acima funciona.

Além disso, estou no OS X.

Responder1

GNU xargs tem uma -0opção que permite a leitura de dados delimitados por bytes nulos. No Linux, você pode fazer:

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

Infelizmente, a Apple colocou off-line seu site herdado de páginas de manual do Darwin, então não posso verificar se existe um equivalente no MacOS.

informação relacionada