List files by size
问 ChatGPT 写了一个 shell 脚本,可以在命令行中按照从大到小,递归地输出除了 .json
文件外的文件,包含文件大小和文件名。可用于辅助筛查项目中哪些图片过大。
单独脚本文件就不存到 GitHub 上了,在这里记录一下吧。
#!/bin/bash
# 定义一个函数将字节大小转为人类可读格式
human_readable_size() {
num=$1
# echo "Converting size: $num bytes" # Log: 转换字节大小
if [ "$num" -lt 1024 ]; then
echo "${num}B"
elif [ "$num" -lt 1048576 ]; then
echo "$((num / 1024))K"
elif [ "$num" -lt 1073741824 ]; then
echo "$((num / 1048576))M"
else
echo "$((num / 1073741824))G"
fi
}
# 临时文件存储所有文件信息
temp_file=$(mktemp)
# echo "Temporary file created: $temp_file" # Log: 临时文件创建
# 使用 find 查找所有文件,排除 .json 文件
find . -type f ! -name "*.json" -print0 | while IFS= read -r -d '' file; do
# 获取文件大小(以字节为单位,macOS 使用 stat -f%z)
size=$(stat -f%z "$file")
# echo "File: $file, Size: $size bytes" # Log: 文件和大小
# 输出字节大小和文件路径到临时文件
echo "$size $file" >> "$temp_file"
done
# Log: 排序之前的临时文件内容
# echo "Contents of temp file before sorting:"
# cat "$temp_file"
# 按字节数降序排序,并输出格式化结果
sort -k1,1nr "$temp_file" | while read -r size file; do
# echo "Processing sorted file: $file, Size: $size bytes" # Log: 处理排序后的文件
# 获取人类可读格式
readable_size=$(human_readable_size "$size")
# 使用 printf 来确保输出格式对齐
printf "%-10s %-10s %s\n" "$readable_size" "$size" "$file"
done
# 删除临时文件
# echo "Deleting temporary file: $temp_file" # Log: 删除临时文件
rm "$temp_file"