Является ли `xargs` решением этой проблемы? - PullRequest
0 голосов
/ 23 сентября 2011

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

СписокФайл имеет формат, сгенерированный, скажем, командой find, например:

~/$ find . -name "*.[ch]" > ~/tmp/my_file_list.txt

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

~/$ sed -r 's_.+_cp & ~/tmp/_' ~/tmp/my_file_list.txt

(копировать и вставлять выходные данные, затем помещать файлы обратно)

~/$ sed -r 's_.+/(.+)_cp ~/tmp/\1 &_' ~/tmp/my_file_list.txt

(копировать ... вставлять ... wince)

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

[Редактировать] Для работы с пробелами:

~/$ sed -r 's_.+_cp "&" ~/tmp/_' ~/tmp/my_file_list.txt

и

~/$ sed -r 's_.+/(.+)_cp "~/tmp/\1" "&"_' ~/tmp/my_file_list.txt

Ответы [ 2 ]

3 голосов
/ 23 сентября 2011

Просто передайте вывод в bash:

~/$ sed -r 's_.+_cp & ~/tmp/_' ~/tmp/my_file_list.txt | bash
0 голосов
/ 24 сентября 2011

Хотя я вижу, что вы уже получили ответ, который решает проблему копирования и вставки, я бы на самом деле предложил использовать rsync для этого. Последовательность будет выглядеть следующим образом:

~/$ find . -name "*.[ch]" > ~/tmp/my_file_list.txt

Для резервного копирования:

~/$ rsync --files-from=tmp/my_file_list.txt . tmp/

Сделайте что-нибудь с исходными файлами, чтобы потом восстановить:

~/$ rsync --files-from=tmp/my_file_list.txt tmp/ .

Это имеет (незначительное) преимущество, заключающееся в том, что вы не копируете файлы, которые вы не изменили, что экономит немного дисковой активности. Это имеет меньшее незначительное преимущество: если у вас есть несколько файлов с одинаковыми именами в разных каталогах, они не будут конфликтовать, потому что rsync сохраняет относительные пути.

...