Bash: Копирование списка файлов, содержащих (много) специальных символов

Bash: Копирование списка файлов, содержащих (много) специальных символов

Я хорошо знаю, как просто скопировать список файлов в другое место с помощью bash, но проблема в том, что мой список файлов содержит имена файлов, которые содержат практически ВСЕ символы, которые нужно экранировать в bash. Там есть тонны пробелов, !, ",", "'", ?, и практически все остальные символы, которые вы можете себе представить, которые нужно экранировать.

Сначала мне надоело просматривать текстовый файл и экранировать все эти символы, но это... утомительно, даже с поиском и заменой (однако это РАБОТАЕТ) (я тестировал это с гораздо меньшим списком файлов.) Я также пробовал добавлять одинарные кавычки в текстовом файле до и после пути, но это не работает. Я также пробовал добавлять одинарные кавычки до и после % после cp, но, очевидно, я понятия не имею, что делаю. :) (Я знаю, что мне пришлось бы экранировать одинарные кавычки в текстовом файле, если бы я каким-то образом окружил путь к файлу одинарными кавычками.)

Я использую эту команду, чтобы скопировать список файлов в другое место, но, опять же, она не работает со специальными символами.

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

Я знаю, что есть и другие команды, которые делают то же самое, не передавая ничего в xargs, и в некоторых ответах здесь говорится, что xargs может сделать это сам, но мне не удалось заставить их работать, в то время как приведенная выше команда работает.

Кроме того, у меня OS X.

решение1

GNU xargs имеет -0опцию, позволяющую ему читать данные, разделенные нулевым байтом. В Linux вы можете сделать следующее:

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

К сожалению, Apple отключила свой старый сайт справочных страниц Darwin, поэтому я не могу проверить, есть ли его эквивалент для MacOS.

Связанный контент