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

Формат arg для cp выглядит так:

cp src_file1 src_file2 src_file3 dest_dir/

Предполагая, что у меня есть файл с именами исходных файлов, перечисленных построчно, как это можно сделать?

Поскольку у меня очень большое количество файлов, идея из @Scott ниже не будет работать, так как она достигнет максимальной длины командной строки.

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

Можно ли это сделать?

Спасибо

2 ответа2

1

Если filelist содержит

apple
orange
banana

где это имена файлов, которые вы хотите скопировать в каталог fruity , введите

cp `cat filelist` fruity

Вам не нужно / в конце.

Предупреждение: это не будет работать, если любое из имен файлов содержит пробелы, например, passion fruit .

0

Имитация print0 из find:

cat filelist |perl -p -e 's/\n/\000/' |xargs -0 cp --target-directory dest_dir/

этот пример включает в себя xargs -0 , --target-directory

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