根据字段状态删除指定目录文件的shell脚本

今天接到有关部门反映,存储的空间不够了。需要删除一些视频文件来腾出空间。由于刚接手工作没多久,上任写的是python脚本。无奈,个人python水平还是入门。所以只能另写个shell脚本来完成工作了。

声明:以下操作均为在虚拟机上进行的,毕竟生产环境是不能够乱来的,所以测试OK之后呢,再到线上执行脚本方可。

要求:删除/data/video/sports/shi/下面的视频

思路:

1.首先有关部门已经将需要删除的目录,字段 statusCode改为0,默认为1

2.根据statusCode的状态查询出要删除的路径

3.删除视频文件完毕后,需要将statusCode的状态改为1

好了,开整:

现状:

[[email protected] shi]# ll
total 0
-rw-r--r-- 1 root root 0 May  4 09:38 hc2012051620.mp4
-rw-r--r-- 1 root root 0 May  4 09:38 hc2012051621.mp4
-rw-r--r-- 1 root root 0 May  4 09:38 hc2012051622.mp4
-rw-r--r-- 1 root root 0 May  4 09:38 hc2012051623.mp4
[[email protected] shi]# mysql -uroot -proot -e "use sne;select ContentID,PlayAddress,statusCode from del_video_file;"
+-----------+---------------------------------------------------------------------+------------+
| ContentID | PlayAddress                                       | statusCode |
+-----------+---------------------------------------------------------------------+------------
|    128704 | http://xxx:17533/gdtv/sports/shi/hc2012051620.mp4 |          0 |
|    128705 | http://xxx:17533/gdtv/sports/shi/hc2012051621.mp4 |          0 |
|    128706 | http://xxx:17553/gdtv/sports/shi/hc2012051622.mp4 |          0 |
|    128707 | http://xxx:17553/gdtv/sports/shi/hc2012051623.mp4 |          0 |
+-----------+---------------------------------------------------------------------+------------+

脚本思路:

1.登录mysql查询statusCode为0的记录,并且用awk取到所需要的路径

#!/bin/bash
#author:ley
#声明路径的变量,因为sql中的路径并不是绝对路径
datadir=‘/data/video‘
result=`mysql -uroot -proot -e 
"use sne;
select ContentID,PlayAddress from del_video_file where statusCode=0;"
|awk ‘BEGIN{FS="17553/"} {print $2}‘`

2.用for循环依次删除视频文件

for i in $result
do
   rm -rf  $datadir/$i
   echo "remove the file is ok"
done

3.根据statusCode=0查询出对应的ContentID

ContentID=
`mysql -uroot -proot -e "use sne;
select ContentID,PlayAddress from del_video_file where statusCode=0;"|awk ‘{print $1}‘`

4.再用for循环依次更新statusCode=1

for id in $ContentID
 do 
update=`mysql -uroot -proot -e 
"use sne;
update del_video_file set statusCode=1 where ContentID=$id;"`

if [ $? == 0 ]
 then
   echo "update is ok"
 else
   echo "update is error"
fi

done

5.查看statusCode的状态已经为1了

[[email protected] script]# mysql -uroot -proot -e 
"use sne;select statusCode from del_video_file;"
+------------+
| statusCode |
+------------+
|          1 |
|          1 |
|          1 |
|          1 |
+------------+

好了,脚本大概就是这样子了。一些细节问题,今后继续完善吧。

时间: 2024-11-06 14:00:27

根据字段状态删除指定目录文件的shell脚本的相关文章

执行系统命令并且将输出写到指定日志文件的shell脚本(2)

上一篇是个简单的可以执行并且写入日志的脚本,但是如果放到生产环境上就显得太粗糙了,所以需要进一步的优化: #! /bin/bash if [ -d "/opt/bmc" ] ; then if [ -f "/opt/bmc/usysfault.log" ] ; then { date +"%Y-%m-%d %H:%M:%S" /usr/lpp/diagnostics/bin/usysfault #要执行的命令的绝对路径 } > /opt/b

Java版本的删除指定目录下名叫“xxx.txt”文件名的文件

以前写过一个python版本的,但是在查找文件路径的时候出现错误,无法正确的获取到文件的路径,就造成无法删除该路径下的“xxx.txt”文件. 当时以为是windows版本系统的错误造成这个问题的,也就没有继续深究,就把这个bug给放过了. 最近一段时间在学习android,肯定要用的java了,就用java实现了下,思路的话,肯定还是以前的了,结果还是出错,后来仔细的看了看代码,其实是自己的bug. 把代码贴下:(主要功能,删除指定目录下名叫"pylist.txt"的所有文件,使用递

删除指定目录下的指定后缀的文件

1 import java.io.*; 2 import javax.swing.*; 3 public class Delete{ 4 public static void main(String[] args)throws Exception{ 5 String target = JOptionPane.showInputDialog(null,"请输入您要清理垃圾的目录:"); 6 File[] fs = new File(target).listFiles(new Filena

php删除指定目录下的相关文件实例

在php中删除文件最简单的办法直接使用unlink命令,但本文章介绍的是需要删除指定目录下的指定文件,所以我需要遍历删除了,具体看这个例子.  代码如下 复制代码 <?php //删除指定文件夹下的非法文件 function my_del($dir)  {     if(is_dir($dir)){         //打开指定文件夹         if($handle = opendir($dir))         {             while(false !== ($file

C#直接删除指定目录下的所有文件及文件夹(保留目录)

? ????#region 直接删除指定目录下的所有文件及文件夹(保留目录) /// <summary> /// 直接删除指定目录下的所有文件及文件夹(保留目录) /// </summary> /// <param name="strPath">文件夹路径</param> /// <returns>执行结果</returns> public bool DeleteDir(string strPath) { try

ASP.NET批量下载服务器端指定目录文件

1 //遍历服务器指定文件夹下的所有文件 2 string path = "uploads/Image/"; 3 string serverPath = Server.MapPath(path); 4 5 //创建临时文件夹 6 string tempName = DateTime.Now.ToString("yyyyMMddHHMMss"); 7 string tempFolder = Path.Combine(serverPath, tempName); 8 D

【Windows删除指定后缀文件cmd命令】

如果我想删除指定目录下的"*.mp4"后缀文件 在命令行中,进入指定目录,输入 del [/q] "*.mp4" del 命令是删除文件cmd(命令行)命令. [/q]是可选选参数,无需确认直接删除. 该命令是直接从磁盘上彻底删除文件,并不是将文件移动到回收站.对该命令删除的文件,难以恢复. 进入文件夹发现,确实批量删除了文件夹下的.mp4文件. 原文地址:https://www.cnblogs.com/Lints/p/11184601.html

批处理删除指定目录及子目录下所有.svn目录

Java代码 @REM 根据用户输入,删除指定目录及子目录下所有.svn目录 @echo off :inputPath set DESTINATION_PATH=: set /p DESTINATION_PATH="Please input the root directory need to clear the svn folders , press enter !  :" if not exist %DESTINATION_PATH% ( @echo [Warn] The inpu

测试过程中常用的linux命令之【删除指定的文件行】

一. 需求 在测试的过程中,会遇到删除指定的文件行的情况,如删除配置文件中无用的信息. 比如有以下文件,要删除最后3行. 二. 解决方法 1.我们知道行号 sed -i '21,23'd Testfile.log 2.我们知道关键字 grep -n 'deleted' Testfile.log  #先获取行号 sed -i '21,23'd Testfile.log 3.使用vi命令 找到要删除的行,在命令模式下,键入 d3d, 即可删除. vi dd可逐行删除,d(y-x)d可删除段落行