工作中,mysql中存储的图片链接信息和FastDFS实际存储的图片数量不一致,此时应该与mysql中有存储记录的图片保持一致,我们要在FastDFS服务器中删除哪些无用的图片。于是乎自己写了一个脚本。

1. 读取mysql中的所有FastDFS存储图片信息---->存储到redis,保存为set

2. 读取FastDFS中的图片信息---->存储到redis,保存为set

3. 两个set,以FastDFS的set和mysql的set做差集运算得到多出来的图片set

4. 在FastDFS服务器上删除上一步中包含的图片

fastdfs提供的脚本不能列出所有的文件,所以我自己写了一个python脚本遍历出所有文件
pythonToRedis.py
把所有文件写入到了本地文件,当然也可以存入关系型数据库或者Redis中(用set去重,做一些交差补运算)

import re
import sys
import os def allFiles():
path = '/data/fastdfs/storage/data' # basepath配置路径
rounds = 1
fdfspath = 'group1/M00' with open('/home/timing/shelles/data.txt','w') as file_url: for dirpath, dirnames, filenames in os.walk(path):
if rounds == 1:
rounds+=1
elif (dirpath == path + '/sync'):
continue
else:
for file in filenames:
try:
paths = re.search(r'/data/fastdfs/storage/data(.*)',dirpath).group(1)
fullpath = os.path.join(fdfspath + paths, file)
print(fullpath)
file_url.write(fullpath + '\n')
except:
pass rounds+=1
file_url.close() def toRedis():
with open('/home/redis/tuna/shelles/data.txt', 'r') as logfile:
for line in logfile:
print(line)
redis_client.sadd('dfs_picture',line.replace('\n', ''))
logfile.close() if __name__ == '__main__':
if(sys.argv[1] == 'allfiles'):
allFiles()
elif(sys.argv[1] == 'toredis'):
toRedis()
else:
print("USAGE:allfiles|toredis")

获取fastdfs所有文件的更多相关文章

  1. FastDFS实现文件上传下载实战

    正好,淘淘商城讲这一块的时候,我又想起来当时老徐让我写过一个关于实现FastDFS实现文件上传下载的使用文档,当时结合我们的ITOO的视频系统和毕业论文系统,整理了一下,有根据网上查到的知识,总结了一 ...

  2. 通过Fastdfs进行文件上传服务(文件和图片的统一处理)

    1.文件上传简单流程分析图: 2.Fastdfs介绍: Fastdfs由两个角色组成: Tracker(集群):调度(帮你找到有空闲的Storage) Storage(集群):文件存储(帮你保存文件或 ...

  3. [转帖]使用fastdfs搭建文件管理系统

    使用fastdfs搭建文件管理系统 https://www.jianshu.com/p/4e80069c84d3 今天同事说他们的系统用到了这个分布式文件管理系统. 一.FastDFS介绍 FastD ...

  4. Java 客户端操作 FastDFS 实现文件上传下载替换删除

    FastDFS 的作者余庆先生已经为我们开发好了 Java 对应的 SDK.这里需要解释一下:作者余庆并没有及时更新最新的 Java SDK 至 Maven 中央仓库,目前中央仓库最新版仍旧是 1.2 ...

  5. struts文件上传,获取文件名和文件类型

    struts文件上传,获取文件名和文件类型   Action中还有两个属 性:uploadFileName和uploadContentType,这两个属性分别用于封装上传文件的文件名.文件类型.这是S ...

  6. Java获取Web服务器文件

    Java获取Web服务器文件 如果获取的是服务器上某个目录下的有关文件,就相对比较容易,可以设定死绝对目录,但是如果不能设定死绝对目录,也不确定web服务器的安装目录,可以考虑如下两种方式: 方法一: ...

  7. ie下获取上传文件全路径

    ie下获取上传文件全路径,3.5之后的火狐是没法获取上传文件全路径的 /*获取上传文件路径*/ function getFilePath(obj) { var form = $(this).paren ...

  8. OpenFileDialog获取文件名和文件路径问题

    OpenFileDialog获取文件名和文件路径问题(转) 转自:http://blog.sina.com.cn/s/blog_7511914e0101cbjn.html System.IO.Path ...

  9. Android之获取string.xml文件里面的方法

    获取string.xml文件里面的方法 在此做个笔记: 1.在AndroidManifest.xml与layout等xml文件里: android:text="@string/resourc ...

随机推荐

  1. python unittest setUp 和 setUpClass 区别

    import unittest class Test(unittest.TestCase): def setUp(self): print("start!=======") def ...

  2. 关于APS在企业生产计划上的应用

    本人本身是一个码农,已经服务了共和国各项事业(好像是说得有点漂,没办法段子看多了)大约一半工作时候了(按60岁退休的话),从一线的小码农,到现在成了老农,出产了不少或优或劣的各种码,几乎啥都做过.近几 ...

  3. Http User Agent Example

    Browser User Agent  Safari Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603. ...

  4. 华硕飞马3S,日常使用续航测试

    最近爱机荣耀6的电池1天2充,无奈换台新机,华为系列没大电池且价格贵,小米红米系列品控呵呵,其他品牌无小屏幕大容量电池: 然后换了台华硕飞马3S:5.2英寸 5000ma电池,日常工作娱乐使用1天半多 ...

  5. Android Studio 制作一个循环播报的效果

    这个就是用到了一个TextView 控件,直接上代码. <TextView android:id="@+id/tv_7" android:layout_width=" ...

  6. Bootstrap关闭当前页

       function doBack() {        var index = parent.layer.getFrameIndex(window.name);        parent.lay ...

  7. pass parameter by endpoint, this is for websocket

    使用了Java的字符串:@ServerEndpoint("/chat/{room}")public class MyEndpoint {@OnMessagepublic void ...

  8. @method_decorator() 源码解析

    # coding:utf-8 """ 作用: 原理:闭包 >> 1. 函数内部定义函数 2.内部函数使用外部函数的变量 3.外部函数返回内部函数的引用 带参数 ...

  9. yarn 报错 requested virtual cores < 0, or requested virtual cores > max configured, requestedVirtualCores=6, maxVirtualCores=4 原因

    INFO ApplicationMaster:54 - Final app status: FAILED, exitCode: 13, (reason: Uncaught exception: org ...

  10. java利用泛型实现不同类型可变参数

    public class VP { public <T> void printMsg(T... args){ for (T t:args){ System.out.println(&quo ...