shell备份,重命名,删除目录下面的文件

因为经常会用到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

[[email protected] 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
   

[[email protected] 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
   

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

链接:https://pan.baidu.com/s/1v5gm7n0L7TGyejCmQrMh2g 提取码:x2p5

免费分享,但是X度限制严重,如若链接失效点击链接或搜索加群 群号936682608

 

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,变量的截取,变量之间的比较等,上面的例子虽然非常的简单,但是包括的知识点还是不少的。

原文地址:https://www.cnblogs.com/it-3327/p/11731953.html

时间: 2024-10-28 10:26:52

shell备份,重命名,删除目录下面的文件的相关文章

Mac / Linux Shell 批量重命名的方法总览

Linux Shell 批量重命名的方法总览 0.用类似 GPRename 这样的图形软件进行批量重命名 1.删除所有的 .bak 后缀: rename 's/\.bak$//' *.bak 2.把 .jpe 文件后缀修改为 .jpg: rename 's/\.jpe$/\.jpg/' *.jpe 3.把所有文件的文件名改为小写: rename 'y/A-Z/a-z/' * 4.将 abcd.jpg 重命名为 abcd_efg.jpg: for var in *.jpg; do mv "$var

shell 批量重命名

shell 批量重命名 1.把文件名的第一字母批量改成a 方法一: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [[email protected] test]# ll total 0 -rw-r--r-- 1 root root 0 Apr 14 15:02 8801.txt -rw-r--r-- 1 root root 0 Apr 14 15:02 8802.txt -rw-r--r-- 1 root root 0

Shell随机重命名所有当前目录一级子目录

直接使用Unix/Linux系统uuid文件截取部分生成随机数,同时为了防止重命名过程中有可能已存在和新随机目录同名的一级子目录,即重命名操作失效,mv效果变成了移动旧目录至一级子目录,特意添加了一重循环检测.使用该脚本可以直接修改脚本所在目录的所有同级一级子目录. #!/bin/sh for Dir in $(find -maxdepth 1 -type d | sed '1d') do     NewDir=$(cat /proc/sys/kernel/random/uuid | cksum

webApi上传服务,可重命名,可创建文件夹

webApi上传服务,根据FileName重命名,根据Path创建文件夹 /// <summary> /// 上传文件 /// </summary> /// <returns></returns> [HttpPost, Route("upload")] public IHttpActionResult UploadFile() { string defaultPath = ConfigurationManager.AppSettings[

django如何给上传的图片重命名(给上传文件重命名)

1.先在你项目中添加一个文件夹如:system 在文件夹下添加__init__.py 和storage.py文件,并在storage.py中添加如下代码: # -*- coding: UTF-8 -*- from django.core.files.storage import FileSystemStorage from django.http import HttpResponse class ImageStorage(FileSystemStorage): from django.conf

R语言 重命名目录下所有文件

myfilepath <- "F:/paper2/climateExposure/wjj_mec/second/paths/" setwd(myfilepath) alltypefiles = dir(myfilepath) newname = gsub(pattern = 'paths.',replacement = 'paths_',x = alltypefiles) file.rename(alltypefiles,newname) 原文地址:https://www.cnb

文件的创建、删除、重命名

-------------siwuxie095 工程结构目录如下: 1.文件的创建: 代码: package com.siwuxie095.file; import java.io.File; import java.io.IOException; public class HelloFile { public static void main(String[] args) { //由于只指定了文件名,而没有指定路径,即相对路径 //对于一个工程而言,其相对路径即工程本身的文件夹(目录) Fil

ASP.NET中的文件操作(文件信息,新建,移动,复制,重命名,上传,遍历)(亲测详细)

做了几天的文件操作,现在来总结一下,错误之处,还望指点!以文件为例,如果对文件夹操作,基本上将File换为Directory即可(例:FileInfo file = new FileInfo(Path);与DirectoryInfo directory = new DirectoryInfo (Path);) 1获取文件信息 在知道文件相对路径的情形,下面代码可以获取文件的详细信息 1 public static void fileinfo(string Path) 2 { 3 Path = S

Java File类(文件的读取,写入,复制与重命名)

文件的重命名   file.reNameTo() public boolean renameTo(File dest) 重新命名此抽象路径名表示的文件. 此方法行为的许多方面都是与平台有关的:重命名操作无法将一个文件从一个文件系统移动到另一个文件系统,dest为新命名的抽象文件 public boolean ReName(String path,String newname) {//文件重命名 //Scanner scanner=new Scanner(System.in); File file

文件重命名

01renameTo public boolean renameTo(File dest) 重新命名此抽象路径名表示的文件. 此方法行为的许多方面都是与平台有关的:重命名操作无法将一个文件从一个文件系统移动到另一个文件系统, 该操作不是不可分的,如果已经存在具有目标抽象路径名的文件,那么该操作可能无法获得成功. 应该始终检查返回值,以确保重命名操作成功. 参数: dest - 指定文件的新抽象路径名 返回: 当且仅当重命名成功时,返回 true:否则返回 false 抛出: SecurityEx