我想创建一个脚本来删除任何带有数字组的目录。
到目前为止,我捕获并分析了该群体:
#!/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 输出的一行:
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}'
实际上,正确的解决方案是 find w/ -nogroup 正如 Paul H 所建议的那样。