Bashスクリプトでls出力の2つの列をキャプチャする方法

Bashスクリプトでls出力の2つの列をキャプチャする方法

数値グループを含むディレクトリを削除するスクリプトを作成したいと思います。
これまでグループを捕捉して分析した。

#!/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

問題は、ディレクトリの実際の名前が別の列にあることです。
以下は、ls出力の1行です。

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

したがって、lsの結果を繰り返して、グループ(この場合は3966)とディレクトリ名(この場合はdirname)をキャプチャして、空のグループが見つかった場合に削除するrm -rfコマンドを構成できる必要があります。
どうすればいいですか?
よろしくお願いします。

答え1

-nogroupフラグでfindを使用する方が簡単ではありませんか?たとえば、

find /var/indexes -nogroup

lsを中心にスクリプトを作成するには、awkが列を選択するために使用するツールです。

答え2

Bashではこれを実際にしたくありませんが、要求したのでこれを分割できます。

#!/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

次のようにawkで簡単です。

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

実際、正しい解決策はPaul Hが提案したようにfind with -nogroupです。

関連情報