如何按名称将文件分类到目录和子目录中

如何按名称将文件分类到目录和子目录中

我是 Linux 世界的新手,我需要一些建议。

我不断将文件以以下格式保存在一个文件夹中:

20221021-164822-778711241-604184411.mp3
20221021-164911-778711241-607925196.mp3
20221021-165005-778711241-775371830.mp3 20221021-165152-778711241-777604545.mp3 20221021-165328-778711241-739031020.mp3
20221021-165410-778711241-723150081.mp3 20221021-165517-778711241-604144169.mp3 20221021-165612-778711241-737180820.mp3 20221021-165702-778711241-604292686.mp3 20221021-165748-778711241-777603529.mp3






格式是

YYYYMMDD-一些数字.mp3

我需要每天将这些文件放入这些树文件夹中

/路径/YYYY/MM/DD

请问您有什么建议吗?

提前非常感谢您。

答案1

这在这里有效:

#!/usr/bin/env bash

# "for" loop to iterate over all *mp3* files
for i in *.mp3; do
    # Use substring to get the name of the directory for each file    
    dr="${i:0:4}/${i:3:2}/${i:6:2}"
    # find out if the directory exists; if it doesn't, create it
    [ -d "$dr" ] || mkdir -p "$dr"
    # Move the file
    mv "$i" "$dr"
done

如果您每天要移动大量文件,您可以通过提前创建整个目录结构来节省一些 CPU 周期:

# Does not allow for leap years
for i in {1..365}; do mkdir -p $(date +'%Y/%m/%d' -d "2021-12-31 +$i days"); done

然后你可以删除这一行:

    [ -d "$dr" ] || mkdir -p "$dr"

您最终可能会得到许多空目录,但它们不会占用太多空间。

答案2

我最终编写了这个脚本并且它似乎有效:

mkdir /destination-folder/$(date +"%Y")
mkdir /destination-folder/$(date +"%Y")/$(date +"%m")
mkdir /destination-folder/$(date +"%Y")/$(date +"%m")/$(date +"%d")
mv /source-folder/* /destination-folder/$(date +"%Y")/$(date +"%m")/$(date +"%d")

cron 总是会在 23:50 运行它

相关内容