abre um arquivo e copia os arquivos listados para outra pasta

2

Eu tenho um arquivo chamado file1.txt contendo nomes de arquivos como abaixo:

filea.txt
fileb.txt
filec.txt

Eu quero copiar os arquivos listados em file1.txt para outra pasta. Qual é o comando do UNIX para usar? (o shell é ksh88 se isso for relevante).

    
por Crystal 30.08.2013 / 16:35

2 respostas

4

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/
    
por 30.08.2013 / 16:38
3

Com ferramentas GNU:

xargs -rd '\n' cp -t /dest/folder -- < file1.txt

POSIXly:

sed 's/./\&/g' < file1.txt | xargs sh -c 'exec cp -- "$@" /dest/dir' sh
    
por 30.08.2013 / 17:44