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

0

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 toneladas de espaços,!, ",", "'",?, E praticamente todos os outros personagens que você poderia imaginar que precisam ser escapados.

Inicialmente cansei de percorrer 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). tentei adicionar aspas simples no arquivo de texto antes e depois do caminho, mas isso não funciona. Eu também tentei adicionar aspas simples antes e depois do% depois do cp, mas obviamente não tenho ideia do que estou fazendo. :) (Eu sei que teria que escapar aspas simples no arquivo de texto se eu fosse de alguma forma cercar o caminho do arquivo com aspas simples.)

Estou usando este comando para copiar a lista de arquivos em outro local, mas, novamente, 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 ter que canalizar nada para o xargs, e algumas respostas aqui dizem que o xargs pode fazer isso sozinho, mas eu não consegui fazer isso funcionar, enquanto o acima faz trabalho.

Além disso, estou no OS X.

    
por user2634928 06.06.2018 / 23:05

1 resposta

1

O GNU xargs tem uma opção -0 para permitir que ele leia dados delimitados por bytes nulos. No Linux, você pode fazer:

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

Infelizmente, a Apple retirou o seu legado de páginas de manual do Darwin, por isso não posso verificar se existe um equivalente MacOS.

    
por 06.06.2018 / 23:34