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 -0
opçã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.