查找bash中带有前缀的文件数

时间:2016-02-18 16:15:19

标签: bash

我一直在尝试计算具有特定前缀的所有文件,然后如果带有前缀的文件数与数字5不匹配,我想打印前缀。

为实现这一目标,我编写了以下bash脚本:

#!/bin/bash
for filename in $(ls); do
    name=$(echo $filename | cut -f 1 -d '.')
    num=$(ls $name* | wc -l)
    if [$num != 5]; then
        echo $name
    fi
done

但我得到了这个错误(反复):

./check_uneven_number.sh: line 5: [1: command not found

谢谢!

2 个答案:

答案 0 :(得分:1)

if语句接受命令,运行它并检查其退出状态。左括号([)本身就是一个命令,但你写了[$num。 shell将$num扩展为1,创建单词[1,这不是命令。

if [ $num != 5 ]; then

答案 1 :(得分:0)

您的代码循环文件名,而不是前缀;因此,如果有三个具有特定前缀的文件名,您将收到三个警告,而不是一个。

请改为尝试:

# Avoid pesky ls
printf '%s\n' * |
# Trim to just prefixes
cut -d . -f 1 |
# Reduce to unique
sort -u |
while IFS='' read -r prefix; do
    # Pay attention to quoting
    num=$(printf . "$prefix"* | wc -c)
    # Pay attention to spaces
    if [ "$num" -ne 5 ]; then
        printf '%s\n' "$prefix"
    fi
done

就个人而言,我更喜欢case而不是笨拙的if,但这需要一些时间来适应。