你好我是unix和bash的新手,我想问问q。我怎么能这样做
指定的目录作为参数给出。找到目录 其中常规文件的行数之和最大。 浏览所有特定目录及其子目录。金额 只计算直接在目录中的文件。
我尝试somethnig,但它无法正常工作。
while [ $# -ne 0 ];
do case "$1" in
-h) show_help ;;
-*) echo "Error: Wrong arguments" 1>&2 exit 1 ;;
*) directories=("$@") break ;;
esac
shift
done
IFS='
'
amount=0
for direct in "${directories[@]}"; do
for subdirect in `find $direct -type d `; do
temp=`find "$subdirect" -type f -exec cat {} \; | wc -l | tr -s " "`
if [ $amount -lt $temp ]; then
amount=$temp
subdirect2=$subdirect
fi
done
echo Output: "'"$subdirect2$amount"'"
done
当我使用这个dirc作为参数时,问题就在这里。(只是示例)
/home/usr/first and there are this direct.
/home/usr/first/tmp/first.txt (50 lines)
/home/usr/first/tmp/second.txt (30 lines)
/home/usr/first/tmp1/one.txt (20 lines)
它会在输出/home/usr/first/tmp1 100
上给我,这是错误的应该是/home/usr/first/tmp 80
我想深入扫描所有目录及其所有子目录。此外,如果多个目录符合最大值,则应列出所有目录。
答案 0 :(得分:1)
鉴于您的示例文件,我将假设您只想查看直接子目录,而不是递归到几个级别:
max=-1
# the trailing slash limits the wildcard to directories only
for dir in */; do
count=0
for file in "$dir"/*; do
[[ -f "$file" ]] && (( count += $(wc -l < "$file") ))
done
if (( count > max )); then
max=$count
maxdir="$dir"
fi
done
echo "files in $maxdir have $max lines"
files in tmp/ have 80 lines
答案 1 :(得分:0)
本着Unix(caugh)的精神,这是一个我个人讨厌的绝对令人作呕的管道链,但构建:)
非常有趣:
find . -mindepth 1 -maxdepth 1 -type d -exec sh -c 'find "$1" -maxdepth 1 -type f -print0 | wc -l --files0-from=- | tail -1 | { read a _ && echo "$a $1"; }' _ {} \; | sort -nr | head -1
当然,除非您患有精神疾病,否则不要使用此功能,请使用glenn jackman的nice answer instead。
您也可以很好地控制find的无限过滤功能。好极了。但是请使用格伦的答案!