shell备份文件、重命名文件、删除指定文件的3个脚本分享

因为经常会用到shell脚本,所以经常会写一些,但是我从来没有系统的学习过shell脚本,遇到问题,就去看手册,或者google一下,到了一定的程度才发现自己的基础真的好差。下面在系统学习shell时,顺便写了点有用的小脚本。

1,备份目录下面文件

代码如下:

#!/bin/bash
E_BADARGS=65

case $# in  //$#表示转入参数的个数,sh bak.sh ./ .sh 有二个参数./和.sh
0)                     // 参数为空时,提示错误,并且退出
echo "message:param is wrong"
exit $E_BADARGS;;
esac

string=" "

cd $1      //进入传入的目录

//备份子目录中的文件时,参数也要接上
if [ $# -gt "1" ]
then
 string=$string" "$2
fi

for filename in *   //读取当前目录中的文件
do
 if [ -d "$filename" ]     //判断一下是不是目录
 then
 /bin/sh /home/zhangy/test/$0 $(pwd)/$filename $string    //是目录的话,进行递归
 else
 if [ $# -gt "1" ] && [ ${filename:(-${#2})} = $2 ]    //指定备份什么样的文件
 then
 cp $filename $filename"bak"
 fi
 if [ $# -eq "1" ]
 then
 cp $filename $filename"bak"  //没指定,备份目录下面的所有文件
 fi
 fi
done
exit 0

[zhangy@BlackGhost test]$ sh bak.sh ./ .sh  这句话的意思是把当前目录(以及子目录)中的所有以.sh为后缀的文件,进行备份

2,重命名文件

代码如下:

#!/bin/bash
E_BADARGS=65

case $# in
0|1|2)
echo "message:param is wrong"
exit $E_BADARGS;;
esac

string=" "
cd $1

if [ $# -gt "2" ]
then
 string=$string" "$2" "$3
fi

for filename in *
do
 if [ -d "$filename" ]
 then
 /bin/sh /home/zhangy/test/$0 $(pwd)/$filename $string
 else
 if [ $# -gt "2" ] && [ ${filename:(-${#2})} = $2 ]
 then
 mv $filename  ${filename%$2}$3
 fi
 fi
done
exit 0

[zhangy@BlackGhost test]$ sh rename.sh /home/zhangy/test .php .html  这句话的意思是说,把当前目录(包括子目录)下的所有以.php为后缀的文件,重命名为.html

3,删除指定文件

代码如下:

#!/bin/bash
E_BADARGS=65

case $# in
0|1)
echo "message:param is wrong"
exit $E_BADARGS;;
esac

string=" "
cd $1

if [ $# -gt "1" ]
then
 string=$string" "$2
fi

for filename in *
do
 if [ -d "$filename" ]
 then
 /bin/sh /home/zhangy/test/$0 $(pwd)/$filename $string
 else
 if [ $# -gt "1" ] && [ ${filename:(-${#2})} = $2 ]
 then
 rm -f $filename
 fi
 fi
done
exit 0

[zhangy@BlackGhost test]$ sh del.sh /home/zhangy/test .log 删除/home/zhangy/test,以及子目录下所有以.log为后缀的文件

4,小结

通过上面例子的练习,总结有以下几点
1,传参数到shell脚本,一般传参数可以通过url或者是form表单,像这样index.php?name=tank,但是shell不能这样,他传参数直接根shell脚本的后面,像这样rename.sh /home/zhangy/test .php .html 向rename.sh传了3个参数,分别是/home/zhangy/test .php .html
2,case语句,if语句的思想差不多,就是写法不一样,多看看,多练练就会适应了。
3,如果将命令的输出,负值给一个变量,语法是$(shell command)  例如 :$(pwd)显示当前目录
4,变量的截取,变量之间的比较等,上面的例子虽然非常的简单,但是包括的知识点还是不少的。

(0)

相关推荐

  • Shell中删除某些文件外所有文件的3个方法

    我的一位同事曾经问过我这样一个问题:在 Linux 下,如何 删除目录中除某些文件之外的所有文件?当时,我告诉他可 以通过模式匹配的方法解决.但其实,除此之外,还有其他 的方法,正所谓"条条大路通罗马".让我们来逐一看看. 假设要删除 ~/Downloads 目录中除 *.iso 和 *.zip 外的 所有文件,那么在 bash 中可以按以下方法处理: 方法1:模式匹配法 复制代码 代码如下: shopt -s extglob # 确认开启 extglob 选项 cd ~/Downlo

  • shell中删除文件中重复行的方法

    Linux下文本处理工具很丰富很强大,例如这样一个文件: 复制代码 代码如下: cat log www.jb51.net 192.168.1.1www.jb51.net 192.168.1.1www.jb51.net 192.168.1.2ffffffffffffffffffffffffffffffffffffeeeeeeeeeeeeeeeeeeeefffffffffffffffffffeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeggggggggggggggg

  • 利用shell删除数据表中指定信息和字段对应的文件

    利用mysql shell命令读取数据库信息,删除指定字段,以及字段对应的文件,适用Linux平台. 前面变量定义为数据基本配置 复制代码 代码如下: #!/bin/bash#Program#    delete the database'info whick state is 3#History:#  2014/2/23  cjp  First release#  2014/3/5/  cjp  change value'setting on 117PATH=/bin:/sbin:/usr/b

  • shell备份文件、重命名文件、删除指定文件的3个脚本分享

    因为经常会用到shell脚本,所以经常会写一些,但是我从来没有系统的学习过shell脚本,遇到问题,就去看手册,或者google一下,到了一定的程度才发现自己的基础真的好差.下面在系统学习shell时,顺便写了点有用的小脚本. 1,备份目录下面文件 复制代码 代码如下: #!/bin/bash E_BADARGS=65 case $# in  //$#表示转入参数的个数,sh bak.sh ./ .sh 有二个参数./和.sh 0)                     // 参数为空时,提示

  • C#利用FileSystemWatcher实时监控文件的增加,修改,重命名和删除

    目录 一.实例化FileSystemWatcher类,并注册监听事件 二.事件处理 三.展示监控记录 好多时候,我们都需要知道某些目录下的文件什么时候被修改.删除过等,如果能用miniFilter驱动过滤来做的话当然是最好不过了,这是内核级别的,当然也比较复杂.如果只是简单的记录就没必要用驱动过滤级别的来做了,用FileSystemWatcher来做就要简单得多. FileSystemWatcher组件可以监视文件系统,并在文件系统发生改变时作出反应.FileSystemWatcher 常用于文

  • Perl 文本文件的读写操作、文件的重命名和删除、多个文本文件的合并实现代码

    读文件: 复制代码 代码如下: #!perlopen filetxt,"/path/a.txt";   #  filetxt为文件句柄,用于和文件a.txt建立链接.文件句柄可任意取名,但不要和Perl自带的几个文件句柄重名.print <filetxt>;                 #  此处print函数用于显示文件a.txt的内容.<>为取行操作符,<文件句柄>用于读取所链接文件的内容.close filetxt;            

  • bat如何延时删除指定文件夹中的文件

    本文介绍的是bat如何延时删除指定文件夹中的文件,下面话不多说了,有需要的来一起看看下面的详细内容. 一.bat延时 xp程序中通过ping 127.0.0.1 -n 20 来实现延时操作,ping本地地址20行. win7中通过timeout 20 来实现延时20秒. 二.删除指定文件 del /q d:\11\*.* 删除d:\11文件夹下的所有文件,并且不需要提示删除. /P 删除每一个文件之前提示确认. /F 强制删除只读文件. /S 从所有子目录删除指定文件. /Q 安静模式.删除全局

  • Linux下使用inode删除指定文件方法示例

    前言 众所周知在Linux中,有时候会遇到文件名是乱码或者是某些特殊中文的文件,这时候通过文件名就很难删除. 同时,对于linux中的任何一个文件都必然有其唯一的inode值,这时候就可以通过inode来删除异常文件名的文件. 操作的对象一般为类似下面的文件: [root@server tmp]# ll 总用量 61404-rw-r--r-- 1 root root 0 6月 16 14:58 ? -rw-r--r-- 1 root root 0 6月 19 12:29 ?? -rw-r--r-

  • Del (erase) 删除指定文件

    Del (erase) 删除指定文件. 语法 del [Drive:][Path] FileName [ ...][/p] [/f] [/s] [/q] [/a[:attributes]] erase [Drive:][Path] FileName [ ...][/p] [/f] [/s] [/q] [/a[:attributes]] 参数 [Drive:][Path] FileName  指定要删除的文件或文件集的位置和名称.需要 Filename.可以使用多个文件名.用空格.逗号或分号分开文

  • php 删除指定文件夹的实例讲解

    1.前言 目标:php删除一个指定目录 所使用的的php函数:is_dir,opendir,readdir,scandir,rmdir,closedir,等等(注:其他文件操作函数也可以完成,这里只列举了本次使用的函数) 2.相关函数介绍 php文件操作的方法大致相同,已经在上一篇介绍过了,这里就不在重复介绍,这里就介绍一个新函数 rmdir 详情参考:http://www.w3school.com.cn/php/func_filesystem_rmdir.asp 3.代码构成 ** * [de

  • C++删除指定文件夹下N天及之前日志文件的方法

    本文实例讲述了C++删除指定文件夹下N天及之前日志文件的方法.分享给大家供大家参考.具体如下: // 功能:删除nDays天及之前的日志文件 // @nDays: 0-不删除日志,3-删除3天及之前的日志(保留今天.昨天.前天的日志) ... void CRecordLog::ClearLog(UINT nDays) // 删除N天前的日志 { if (nDays > 0) { WIN32_FIND_DATA FindFileData; CString sAllFile = m_sLogFold

  • Java删除指定文件夹下的所有内容的方法(包括此文件夹)

    如下所示: // 删除文件夹 private static void deleteDirectory(File file) { if (file.isFile()) {// 表示该文件不是文件夹 file.delete(); } else { // 首先得到当前的路径 String[] childFilePaths = file.list(); for (String childFilePath : childFilePaths) { File childFile = new File(file

  • PHP实现批量清空删除指定文件夹所有内容的方法

    本文实例讲述了PHP实现批量清空删除指定文件夹所有内容的方法.分享给大家供大家参考,具体如下: cleancache.php: <?php // 清文件缓存 $dirs = array( realpath(dirname(__FILE__) . '/../data/cache_data'), realpath(dirname(__FILE__) . '/../data/cache_file'), realpath(dirname(__FILE__) . '/../data/cache_view'

随机推荐