linux:输出文件/目录中最长字符串

最简单版本
#find_max.sh
#!/bin/bash
#if [[$# lt 1]];then
# echo "Usage : %s file[...]\n" $0
#fi
max_len=0
max_str=''

for i in `cat $1 | tr -s -c "a-zA-Z" " "`; do
    len=${#i}
    if [[ ${len} -gt ${max_len} ]];then
        max_len=${len}
        max_str=${i}
    fi
#    echo ${len}
done
echo $max_len $max_str
加了对目录的递归检索+过滤黑名单中的文件类型
#find_max1.sh
#!/bin/bash
#查找文件中最长字符串
#数组
filter_types=(mp4 gz avi tar)

function filter(){
    #取出后缀
    #cut -d(delim分隔符)
    temp=`basename ${1} | rev | cut -d "." -f 1 | rev `
    #@表示所有元素
    for i in ${filter_types[@]};do
        if [[ i -eq temp ]];then
            echo "Filters on!"
            echo "${1} is filtered."
            return 1;
        fi
    done
}

function find_max_in_file(){
    #if [[ ! -f ${i}]]
    echo "Using func find_in_file"
    filter ${1}
    #$?返回上一个函数的输出值
    if [[ $? -eq 1 ]];then
        return 
    fi
    words=`cat $1 | tr -s -c "a-zA-Z" "\n"`
    echo ${words}
    for i in ${words};do
        len_t=`echo -n ${#i}`
        #echo ${len_t}
        if [[ ${len_t} -gt ${max_len} ]];then
            max_len=${len_t}
            max_str=${i}
            max_file=${1}
        fi
    done
}

#递归查找目录中的文件
function find_max_in_dir(){
    echo "Using func find_in_dir"
    for i in `ls -A $1`;do
    	#test表达式一定要前后加空格!!
    	#-d判断是不是or是否存在这个目录
        if [[ -d ${1}/${i} ]];then
            echo "${1}/${i} is a dir"
            find_max_in_dir ${1}/${i}
        else
            echo "${1}/${i} is a file"
            find_max_in_file ${1}/${i}
        fi
    done

}
#find_max1_main.sh
#!/bin/bash
#全局变量
max_file=""
max_str=""
max_len=""
#引入其他文件
source find_max1.sh
#$#参数个数
if [[ $# -lt 1 ]];then
    find_max_in_dir " "
else
	#$@所有参数
    for i in $@;do
        echo "Start searching...\n"
        if [[ -d $i ]];then
            find_max_in_dir $i
        else
            find_max_in_file $i
        fi
    done
fi
printf "Max_str : %s\nMax_len : %s\nMax_file : %s\n" ${max_str} ${max_len} ${max_file}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值