工作中,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. py-day3-2 python 函数递归

    # 递归 def calc(n): print(n) if int(n/2) == 0: return n res = calc(int(n/2)) return res res = calc(10) ...

  2. nginx 信号

    来源:nginx.cn Nginx信号控制 Nginx控制信号 TERM, INT 快速关闭 QUIT 从容关闭 HUP 重新加载,用新的配置开始新的工作进程 USER1 重新打开日志文件 USER2 ...

  3. sysbench write and read only

    Writesysbench --test=/usr/share/doc/sysbench/tests/db/oltp.lua --mysql-host=192.168.1.50 --mysql-por ...

  4. 黄聪:windows下使用xampp3.2.2配置多个监听端口和不同的网站目录

    windows下使用xampp3.2.2配置多个监听端口和不同的网站目录 一:配置Apache文件httpd.conf 打开Apache的配置文件httpd.conf,可以通过点击xampp的Apac ...

  5. Android开发 :androidstudio device offline

    使用设备调试的时候,偶尔的就会遇到androidstudio device offline,尽管尝试开启/关闭  USB调试 .都无济于事. 如果PC安装了360手机助手就好办了(我的360手机助手 ...

  6. Centos7 安装redis集群哨兵模式

    https://blog.csdn.net/lihongtai/article/details/82826809

  7. Pillow《转载》

    Pillow https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432002 ...

  8. Chrome默认搜索引擎被窜改

    折腾了几个安全软件之后,Chrome浏览器默认搜索引擎被窜改,且无法删除,提示“管理员安装”,另外在插件栏出现了一个unTabs的东西,也无法删除,“受政策保护之类的”.搜索后找到一篇文章“Unabl ...

  9. struts设置开发者模式

    struts设置开发者模式 在使用ssh框架做项目时,struts.xml文件总要配置许多项功能,其中一个就是开发者模式: <constant name="struts.devMode ...

  10. 6-安装hbase

    1.前提条件 ①安装zookeeper ②安装hdfs ③由于Hbase对时间的要求比较苛刻,所以3台节点时间必须同步,否则会报错 s10 zookeeper RegionServer HMaster ...