cp com interativo não avisa antes de sobrescrever

1

Eu observei um comportamento estranho cp. Exatamente o ponto é que o CP não me pediu confirmação, mesmo com a opção interativa.

Um caso de teste é assim

Arquivos existentes

find * -type f
app/file.txt
test/file.txt

comportamento correto

/usr/bin/cp -ip test/file.txt app/
cp: overwrite app//file.txt (yes/no)? yes

comportamento incorreto

find test/ -type f | while read line; do /usr/bin/cp -ip $line app/; done

Por que, no segundo caso, cp não solicitou.

    
por kawu 25.02.2015 / 16:49

1 resposta

0

Dada a simplicidade do seu loop while, faz mais sentido usar xargs para sua tarefa. Também deve ser mais rápido, embora eu duvide que o diretório test/ seja grande o suficiente para notar.

find test/ -type f -print0 |xargs -0 cp -ipt app/

Observe que -t é uma extensão do GNU. Se isso for problemático, você precisará de algo assim (para fazer isso com o GNU xargs , altere o -J para um -I ):

find test/ -type f -print0 |xargs -0 -J % cp -ip % app/

Eu usei find -print0 e xargs -0 , então isso funcionará mesmo quando seus arquivos tiverem espaços em seus nomes.

    
por 26.02.2015 / 01:29

Tags