xargs и cp: множественное расширение "{}+" в стиле поиска?

xargs и cp: множественное расширение "{}+" в стиле поиска?

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

Формат аргумента cpвыглядит следующим образом:

cp src_file1 src_file2 src_file3 dest_dir/

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

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

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

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

Спасибо

решение1

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

apple
orange
banana

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

cp `cat filelist` fruity

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

Предупреждение: это не сработает, если какое-либо имя файла содержит пробелы, например, passion fruit.

решение2

Имитация print0находки:

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

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

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