ls | egrep | xargs rm

0

Eu tenho um grupo de arquivos que gostaria de remover de uma só vez.

ls | egrep \^New

A saída é como esperada,

New 1
New 2
New 3

mas continuando o pipe com

| xargs -L rm

tenta remover a entrada como delimitada por espaço:

rm: New: No such file or directory
rm: 1: No such file or directory

O que estou perdendo?

    
por erythraios 17.10.2017 / 17:58

2 respostas

4

Não analise ls . Isso deve fazer o truque:

rm New*

Sua abordagem está falhando porque xargs divide os argumentos no espaço em branco por padrão, portanto, ela executa rm em New , 1 , New , 2 etc. Você poderia contornar isso dividindo em novas linhas, mas isso não funcionará com nomes de arquivos contendo novas linhas.

    
por 17.10.2017 / 18:05
0

Sim, você está certo, xargs está dividindo os nomes dos arquivos nos espaços. Se você estiver usando o GNU xargs , você pode usar uma nova linha como o delimitador com a opção -d . Exemplo:

ls | egrep \^New | xargs -d '\n' rm

    
por 17.10.2017 / 18:16

Tags