gpt4 book ai didi

linux - 在单个目录中查找行数最多的文件

转载 作者:太空宇宙 更新时间:2023-11-04 12:01:01 25 4
gpt4 key购买 nike

我正在尝试创建一个函数,它只输出目录(而不是任何子目录)中行数最多的文件。我被要求使用 wc 函数,但并不真正理解如何单独读取每个文件,然后对它们进行排序以找到最大的文件。这是我目前所拥有的:

#!/bin/bash

function sort {
[ $# -ne 1 ] && echo "Invalid number of arguments">&2 && exit 1;
[ ! -d "$1" ] && echo "Invalid input: not a directory">&2 && exit 1;
# Insert function here ;
}

# prompt if wanting current directory
# if yes
# sort $PWD
# if no
#sort $directory

最佳答案

这个解决方案几乎是纯 Bash(wc 是唯一使用的外部命令):

shopt -s dotglob    # Include filenames with initial '.' in globs
shopt -s nullglob # Make globs produce nothing when nothing matches

dir=$1

maxlines=-1
maxfile=

for file in "$dir"/* ; do
[[ -f $file ]] || continue # Skip non-files
[[ -L $file ]] && continue # Skip symlinks

numlines=$(wc -l < "$file")

if (( numlines > maxlines )) ; then
maxfile=$file
maxlines=$numlines
fi
done

[[ -n "$maxfile" ]] && printf '%s\n' "$maxfile"

如果您不想处理名称以点开头的文件,请删除 shopt -s dotglob。如果要处理文件的符号链接(symbolic link),请删除 [[ -L $file ]] && continue

此解决方案应处理所有文件名(包含空格的文件名、包含 glob 字符的文件名、以“-”开头的文件名、包含换行符的文件名...),但它会为每个文件运行 wc 因此如果您需要处理包含大量文件的目录,与将许多文件同时提供给 wc 的解决方案相比,它可能慢得令人无法接受。

关于linux - 在单个目录中查找行数最多的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52437199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com