Remover diretórios interativamente usando xargs

0

Localizando todos os diretórios com uso de espaço Gigabyte. Extraindo o nome do diretório de xargs e, em seguida, novamente xargs para removê-los.

du -d2 -h ~/Downloads/ | grep -E '[0-9]G' | xargs -I{} sh -c "echo {} | cut -d' ' -f2"  | xargs rm -ri

Eu gostaria de remover o diretório de forma interativa, mas não tenho chance do bash de inserir minha opção.

    
por infoclogged 21.06.2017 / 14:21

2 respostas

0

Você não pode responder de forma interativa a rm -ri perguntas com o último comando xargs canalizado: explicação aqui .

Em vez disso, você pode colocar a lista de diretórios grandes como argumentos em rm -ri :

rm -ri $(du -d2 -h ~/Downloads/* | grep -E '[0-9]G' | xargs -I{} sh -c "echo {} | cut -d' ' -f2")

Observe que você pode substituir o xargs cut por awk como tal:

rm -ri $(du -d2 -h ~/Downloads/* | grep -E '[0-9]G' | awk '{print $2}')

Ou ainda mais curto:

rm -ri $(du -d2 -h ~/Downloads/* | awk '$1 ~ /G$/ {print $2}')

Observe também que os comandos acima não funcionarão bem se houver espaços nos nomes de arquivos.

    
por 21.06.2017 / 16:52
0

Parece que existe de fato um método para excluir diretórios interativamente usando xargs. Depois de ler as man pages, eu mesmo saí com uma solução.

A opção -p, juntamente com a opção -n 1, resolve o problema.

du -d2 -h ~/Downloads/* | grep -E '[0-9]G' | xargs -I{} sh -c "echo {} | cut -d' ' -f2"  | xargs -p -n1 rm -r
    
por 22.06.2017 / 10:34

Tags