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



我是命令行新手,我正在尝试编写命令行调用,以根据文件大小将目录中的文件分类为三个子目录,分别命名为小(0-500KB(,中(500KB-1MB(和大(1MB及更多(。我需要提供目录路径作为输入,如果它们不存在,请创建输出子目录。

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

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

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

以下脚本根据您声明的要求分隔文件。我认为您有能力将代码转换为您的需要。该脚本需要输入一个要排序的文件目录。

#! /bin/bash
MY_DIR=$1
[ ! -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

最新更新