背景
之前不是自己手动搞了一个COS嘛,直接复制粘贴图片,上传到后端的服务器,返回一个可访问的地址。我在哔哩哔哩上也分享过这样的一期视频。
今天偶尔上服务器一看,我靠,我的文件真的乱!
这还得了了,我要是长年累月的去上传文件,这不得堆积成山了,到时候我想去维护都很难了。我是shigen
, 作为强迫症患者,我哪能忍,必须整治,必须整治!
整改
我要采取新的命名方式了,年月/文件名
,意思是按照年月对文件进行分组,废话不多说,上代码。这次我选取的是shell脚本,当然,shigen有写代码的神器在手。
#!/bin/bash
# 匹配的文件名模式
file_pattern="2023*.png"
# 遍历所有匹配的文件
for file_name in $file_pattern; do
# 提取年份和月份
year_month="${file_name:0:6}"
# 创建目标文件夹路径
target_dir="./$year_month"
# 如果目标文件夹不存在,则创建它
mkdir -p "$target_dir"
# 移动文件
mv "$file_name" "$target_dir"
echo "文件已移动到目标文件夹:$target_dir/$file_name"
done
其实也挺简单,根据文件名模式找到符合条件的文件,再去截取文件名获得文件的年月,之后就是创建文件夹移动了。最终的效果如下:
可以看到文件是按照年月来分级的,目前的话我的文件主要分布在两个文件夹里,正好原来保存的也是保存的两个月的文件。但是治标不治本,根治它还得在代码里。
file_save_path = os.path.join(base_path, datetime.now().strftime('%Y%m%d%H%M%S') +'.png')
明显看到,这个是直接放在base_path
下边了。和我预想的结果差了很多了。这里就是根本,必须得去修改一下:
now = datetime.now()
cur_base_path = os.path.join(base_path, now.strftime("%Y%m%d"))
if not os.path.exists(cur_base_path):
os.makedirs(cur_base_path)
file_save_path = os.path.join(cur_base_path, now.strftime('%Y%m%d%H%M%S') +'.png')
本地调试好了,部署了后端的服务,一切正常,可以看到我的预览地址的路径已经改过来了!我的强迫症得到了很好的治愈了。
后记
其实这个案例分享出来,不为炫技或者啥的,关键是为了展示一种思想:约定>规范>配置>编码
。在做任何的设计的时候,其实前边的步骤缺一不可,否则后边都会带来很大的麻烦,造成一定的维护成本。
当然,这样的案例大家也可以试试其它的方式实现:
python
os.move()
shutil.move(source, destination)
java
Files.move()
用到的nio下边的包node.js
fs.rename(source, destination, (err) =>{}
golang
err:= os.Rename(source, destination)
我是shigen
,感谢大家的阅读。