Como posso capturar duas colunas de saída ls em um script bash

0

Eu quero criar um script para excluir quaisquer diretórios com grupos numéricos.
O que eu tenho até agora captura e analisa o grupo:

#!/bin/bash
re='^[0-9]+$'
for x in '/usr/bin/ls -l /var/indexes | sort -k3,3 | tr -s " " | cut -f3 -d " "'
do
if [[ $x =~ $re ]] ; then
   echo "found one $x"
fi
done

O problema é que o nome real do diretório está em outra coluna.
Aqui está uma linha da saída ls:

drwxr-sr-x. 3                     3966 root 4096 Oct 20 16:29 dirname

Portanto, preciso iterar os resultados ls e capturar o grupo (neste caso, 3966) e o nome do diretório (neste caso, o nome do diretório) para que eu possa formar um comando rm -rf para removê-lo quando encontrar um espaço em branco um.
Como eu faria isso?
Agradecemos antecipadamente.

    
por Braiam 01.12.2014 / 23:49

2 respostas

1

Você realmente não quer fazer isso no bash, mas porque você perguntou, é assim que você pode dividi-lo.

#!/bin/bash
re='^[0-9]+$'
for x in '/usr/bin/ls -l --time-style=+'%s' /var/indexes | sort -k3,3 | awk '{print $3 $7}''
do
read -A nm <<< "$x"
if [[ ${nm[0]} =~ $re ]] ; then
   echo "found one " ${nm[1]}
fi
done

É mais fácil no awk assim:

/usr/bin/ls -l --time-style=+'%s' /var/indexes | sort -k3,3 | awk '($3 ~ /^[0-9]+$/){print $7}'

Realmente, a solução certa é encontrar w / -nogroup como sugerido por Paul H ..

    
por 02.12.2014 / 00:05
3

Não seria mais fácil usar o find com o sinalizador -nogroup? Por exemplo:

find /var/indexes -nogroup

Se você quiser basear o script em torno de ls, então o awk é uma ferramenta que eu usaria para selecionar colunas.

    
por 01.12.2014 / 23:59

Tags