📅  最后修改于: 2023-12-03 15:07:06.237000             🧑  作者: Mango
当我们需要在Shell/Bash中查看一个文件夹下的文件大小时,可以使用ls
命令,但是该命令只能列出文件名,无法按照大小进行排序。因此,为了更方便地管理文件,我们可以使用一个具有大小的终端列表文件夹。
我们可以编写一个脚本,使用Shell/Bash语言,实现以下步骤:
find
命令查找该文件夹下的所有文件stat
命令获取每个文件的大小,并计算出以KB或MB为单位的大小#!/bin/bash
# 定义一个递归函数,传入一个目录作为参数
function list_dir {
local DIR=$1
local PRE=$2
# 输出目录名称
echo "${PRE}├── $(basename "$DIR")"
# 获取该目录下所有文件(包括子目录)
local FILES=("$DIR"/*)
local FILE
# 遍历每一个文件
for FILE in "${FILES[@]}"; do
# 如果是目录则递归处理该目录
if [[ -d "$FILE" ]]; then
list_dir "$FILE" "${PRE}│ "
# 如果是文件则输出文件名和大小
elif [[ -f "$FILE" ]]; then
# 获取文件大小,并转换为KB或MB
local SIZE=$(stat --printf="%s" "$FILE")
if (( SIZE < 1024 )); then
local SIZE_STR="${SIZE}B"
elif (( SIZE < 1048576 )); then
local SIZE_STR="$(printf "%.1f" $(echo "$SIZE/1024" | bc -l))KB"
else
local SIZE_STR="$(printf "%.1f" $(echo "$SIZE/1048576" | bc -l))MB"
fi
# 输出文件名和大小
echo "${PRE}│── $(basename "$FILE") (${SIZE_STR})"
fi
done
}
# 接受一个目录作为参数,列出该目录下的所有文件和子目录
function list_folder {
# 检查参数是否合法
if [[ -d "$1" ]]; then
list_dir "$1" ""
else
echo "Usage: $0 <directory>"
exit 1
fi
}
# 调用函数,传入要列出的目录作为参数
list_folder "/path/to/folder"
├── folder1
│ ├── file1.txt (10.5KB)
│ └── file2.txt (4.9KB)
├── folder2
│ ├── file3.txt (100.2MB)
│ ├── file4.txt (2.4KB)
│ └── subfolder
│ ├── file5.txt (20.1MB)
│ └── file6.txt (850.5KB)
├── file7.txt (3.3KB)
└── file8.txt (21.9MB)
上述代码示例可以帮助程序员更方便地管理文件,快速获取文件大小,并按照大小进行排序。该功能对于需要经常处理文件的开发者来说十分实用。