Seu formato pressupõe que nenhum nome de arquivo tenha novas linhas, o que não é o ideal (novas linhas são legais em nomes de arquivos). Você também não menciona sua concha. No entanto, em um shell POSIX, você pode fazer isso:
while IFS= read -r file; do
cp -- "$file" new_dir/
done < file
No bash, pode ser mais rápido passá-los todos para cp de uma só vez, no entanto (contanto que você esteja abaixo de ARG_MAX
):
files=()
while IFS= read -r file; do
files+=( "$file" )
done < file
cp -- "${files[@]}" new_dir/
... ou, a mesma coisa, se você tiver bash4 +:
mapfile -t files < file
cp -- "${files[@]}" new_dir/