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

it2023-06-08  69

最简单版本

#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)