bash 中的递归无限循环

bash 中的递归无限循环

我想搜索目录中具有特定名称的所有文件并对其应用 ls -l 来检查其大小,首先我使用了它,find . -name .ycm* | ls -l但它不起作用,从以下位置得到了解释这个链接

然后我尝试创建一个脚本,该脚本将递归地遍历目录并搜索文件名并ls -l对其执行操作或执行任何其他命令。

我使用了以下脚本,但事实证明它卡在第一个调用本身中,并且一次又一次地调用它。

#!/bin/bash
for_count=0 
file_count=0
dir_count=0
search_file_recursive() {
    # this function takes directory and file_name to be searched 
    # recursively
    # :param $1 = directory you want to search
    # :param $2 = file name to be searched

    for file in `ls -a `$1``:
    do
        let "for_count=for_count+1"
        echo "for count is  $for_count"
        # check if the file name is equal to the given file
        if test $file == $2 
        then
            ls -l $file
            let "file_count++"
            echo "file_count is $file_count"
        elif [ -d $file ] && [ $file != '.' ] && [ $file != '..' ]
        then
            echo "value of dir = $1 , search = $2, file = $file"
            search_file_recursive $file $2
            let "dir_count++"
            echo "directory_count is $dir_count"
        fi
    done
    return  0
}

search_file_recursive $1 $2

这就是我的输出在没有回声的情况下的样子

 anupam  …  YouCompleteMe  third_party  ycmd   ae8a33f8 … 5  ./script.sh pwd .ycm_extra_conf.py 
Segmentation fault: 11
 anupam  …  YouCompleteMe  third_party  ycmd   ae8a33f8 … 5  echo $?
139

答案1

使用 GNU find,要获取文件名与模式匹配的常规文件的大小(以字节为单位).ycm*,您可以这样做

find . -type f -name '.ycm*' -printf '%s\t%p\n'

这将打印大小,后跟制表符和文件的路径名。请注意文件名模式的引用,以避免将其用作命令行上的 shell 通配模式。

以下将以stat类似的方式对每个文件使用外部命令(仅限 Linux):

find . -type f -name '.ycm*' -exec stat --printf '%s\t%n\n' {} +

以下内容适用于 BSD 系统(例如 macOS):

find . -type f -name '.ycm*' -exec stat -f '%z%t%N' {} +

在 BSDstat格式字符串中,%z将被替换为以字节为单位的大小,%t将被替换为制表符,并将%N被替换为文件的路径名。

也可以看看:

相关内容