问 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"