我是 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 运行它