gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:59:48 25 4
gpt4 key购买 nike

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

关于linux - 命令行调用将目录中的文件根据文件大小分为三个子目录,分别命名为小、中和大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57188813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com