Я хорошо знаю, как просто скопировать список файлов в другое место, используя bash, но проблема в том, что мой список файлов содержит имена файлов, которые содержат почти КАЖДЫЙ символ, который необходимо экранировать в bash. Существуют тонны пробелов,!, ",", "'",?, И почти любой другой персонаж, о котором вы могли подумать, должен быть экранирован.

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

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

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

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

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

1 ответ1

1

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .