我是命令行新手,我正在尝试编写命令行调用,以根据文件大小将目录中的文件分类为三个子目录,分别命名为小(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