命令行调用将目录中的文件根据文件大小分为三个子目录,分别命名为小、中和大

Command-line invocation to sort files in a directory into three subdirectories named small, medium, and large based on file size

我是命令行的新手,我正在尝试编写命令行调用以将目录中的文件分类为三个子目录,分别命名为小 (0-500KB)、中等 (500KB-1MB) 和大(1MB 或更多)基于文件大小。我需要将目录路径作为输入,如果不存在则创建输出子目录。

我刚刚尝试了这段代码,但没有得到我需要的结果。

find . -type f -exec du -h {} + | sort -r -h

我是不是做错了什么?有人可以帮帮我吗?谢谢。

以下脚本根据您提出的要求分隔文件。我认为您有能力将代码转换为您的需要。该脚本期望将文件排序的目录作为输入。

#! /bin/bash
MY_DIR=
[ ! -z "${MY_DIR}" ] || exit 1

cd ${MY_DIR}
MY_FILES=$(find . -type f -exec du -kh {} +  | sort -h -r)
IFS=$'\n'

mkdir lower_500 lower_1000 higher_1000

for i in ${MY_FILES[@]}; do
    file_size=$(echo $i | grep -oE '^[0-9]*')
    file_name=$(echo $i | grep -oE '[^[[:space:]]*]*$')

    echo file_size=$file_size, file_name=$file_name
    if [ "$file_size" -lt 500 ]; then
        mv $file_name lower_500
    elif [ "$file_size" -lt 1000 ]; then
        mv $file_name lower_1000
    else
        mv $file_name higher_1000
    fi
done

exit 0

生成测试数据:

$ mkdir test
$ dd if=/dev/zero of=test/a.img bs=1K count=100
$ dd if=/dev/zero of=test/b.img bs=1K count=520
$ dd if=/dev/zero of=test/c.img bs=1K count=1020