文件剪切的sh脚本实现

需求描述
编写shell脚本实现Linux下不同目录(路径)之间的文件的剪切(移动)操作。

其中,文件移动之前所在的目录称为源目录,文件移动之后所在的目录称为目的目录。要求当源目录不存在、源目录下无文件及剪切文件成功时,均要在屏幕上输出相关的日志信息;并且,在程序执行之前,只有源目录是存在的,目的目录需要由程序创建。

shell脚本

umask 0000
if [ -d $1 ]
then
    fcnt=`ls -l $1 | wc -l`
    if [ $fcnt -ne 1 ]
    then
        mkdir -p $2
        if [ -d $2 ]
        then
            mv $1* $2
            echo "move $fcnt file(s) from $1 to $2 successfully!"
        else
            echo "$2 does not exist!!!"
        fi
    else
        echo "$1 is empty!"
    fi
else
    echo "$1 does notexist!!!"
fi

脚本说明
针对本shell脚本(命名为movefile.sh),说明如下:

第一,脚本第一行“umask 0000”表示赋予程序访问文件的权限,因为后续要对文件进行剪切操作,所以必须要有对文件的操作权限才行。

第二,执行脚本的时候,要输入两个参数,第一个表示源文件目录,第二个表示目的目录。具体到脚本中,变量$1表示源文件目录,变量$2表示目的目录。

第三,本脚本的主要流程是这样的:首先判断源文件目录是否存在,如果不存在,则直接打印源目录不存在的消息;如果存在,则获取源目录下的文件数目,如果文件数为0,那么表示无需要剪切的文件,那么直接打印源目录下无文件的消息;如果文件数大于0,那么就创建目的目录,并在目的目录创建成功的情况下之行文件的剪切操作。

第四,执行本脚本的命令格式为:sh movefile.sh 源文件目录 目的目录。注意,两个目录均要以/结束。

脚本执行
将movefile.sh脚本上传到Linux机器上,然后对它进行测试。

第一,当源文件目录不存在时,执行情况如下:

~>sh movefile.sh /home/zhou/movefile/srcdir/ /home/zhou/movefile/destdir/
/home/zhou/movefile/srcdir/ does notexist!!!

第二,当源文件目录下无文件时,执行情况如下:

~>sh movefile.sh /home/zhou/movefile/srcdir/ /home/zhou/movefile/destdir/
/home/zhou/movefile/srcdir/ is empty!

第三,当源文件目录下有1个文件时,执行情况如下:

~>sh movefile.sh /home/zhou/movefile/srcdir/ /home/zhou/movefile/destdir/
move 1 file(s) from /home/zhou/movefile/srcdir/ to /home/zhou/movefile/destdir/ successfully!

第四,当源文件目录下有10个文件时,执行情况如下:

~>sh movefile.sh /home/zhou/movefile/srcdir/ /home/zhou/movefile/destdir/
move 10 file(s) from /home/zhou/movefile/srcdir/ to /home/zhou/movefile/destdir/ successfully!

总结
本文中的需求,如果有高级语言(如C语言)实现,那么代码行数至少在100行以上,而如果有shell脚本实现,那么仅需要20行左右的代码即可搞定。如此可以看出,shell命令的强大,这也算是Linux给开发者带来的一大便利。

时间: 2024-09-12 10:18:39

文件剪切的sh脚本实现的相关文章

Linux下文件剪切的sh脚本实现

需求描述 编写shell脚本实现Linux下不同目录(路径)之间的文件的剪切(移动)操作. 其中,文件移动之前所在的目录称为源目录,文件移动之后所在的目录称为目的目录.要求当源目录不存在.源目录下无文件及剪切文件成功时,均要在屏幕上输出相关的日志信息:并且,在程序执行之前,只有源目录是存在的,目的目录需要由程序创建. shell脚本 umask 0000 if [ -d $1 ] then fcnt=`ls -l $1 | wc -l` if [ $fcnt -ne 1 ] then mkdir

shell-linux sh脚本生成txt文件

问题描述 linux sh脚本生成txt文件 执行sh生成数据文件,然后后面要求在执行成功后生产一个日志文件,日志文件中并不需要什么内容. 解决方案 Linux下通过sh脚本执行jar文件简单的Linux sh脚本文件linux下sh脚本定时删除文件 解决方案二: #!/bin/sh DE1="_" DE2="." for fl in `ls * | grep data` do part1=`echo $fl | cut -d$DE1 -f 1` part2=`ec

备份-求打版本(版本文件目录结构和服务器的一样)的sh脚本

问题描述 求打版本(版本文件目录结构和服务器的一样)的sh脚本 现有服务器上有一个web应用,会频繁的更新class源文件以及jsp.js页面文件和配置文件.希望能用一个sh脚本实现,将要更新的版本文件(每个文件所在目录结构和服务器上的一样)保持目录结构备份到脚本所在的backup目录,然后更新服务器上对应的文件! 解决方案 treehttp://blog.csdn.net/beyondlpf/article/details/6922261

python-求助各位~一个有关linux中.sh脚本里写循环的问题,谢谢O(∩_∩)O~

问题描述 求助各位~一个有关linux中.sh脚本里写循环的问题,谢谢O(∩_∩)O~ a = [""name1""name2""name3""......""name100""] for i in 路径/*.py #这个路径底下有100个python脚本名字不同,代码一样do 我需要把每个python文件打开,改动一行if name = """"

批量转换目录下文件编码的shell脚本代码_linux shell

一例批量转换目录下文件编码的shell脚本代码. 需求描述:由于从window转linux过来,很多原来win下的gbk文件需要转换成utf8. 以下脚本仅判断非utf8文件转换成utf8文件,并且默认非utf8文件为gbk,如果文件类型不一致需要修改. 例子: 复制代码 代码如下: #!/bin/bash# File Name: iconv.sh# Author: wanggy# site: www.jb51.net#show_file(){    for file in `ls $1`   

myclipse里ant怎么执行.sh脚本

问题描述 在cygwin控制台里执行脚本程序正常运行,但是myeclipse里不知道如何运行cygwin,求大家指条明路,万分感谢不知道我表达清楚没.. 解决方案 解决方案二:我在运行dRBAC的源程序,ant编译build.xml文件后生成class文件,然后再cygwin里直接跑脚本程序就正常运行了,现在我想debug程序,因此想转到myeclipse里一步一步调试,但是编译以后,不知道怎么运行脚本,貌似.sh脚本需要在cygwin下才能跑起来,那样子的话是不是问题就变成如何让cygwin在

ubuntu-Ubuntu下如何每次开机启动运行/home/test.sh脚本

问题描述 Ubuntu下如何每次开机启动运行/home/test.sh脚本 Ubuntu下如何每次开机一启动就运行/home/test.sh脚本 解决方案 /etc/init.d/rc.local中添加上你的脚本完整路径. 解决方案二: 使用下面的命令在启动目录创建一个链接 ln -s /etc/rc.d/init.d/ /home/test.sh //建立软连接快捷方式 当然要确保脚本可执行,可以使用chmod +x命令设置

怎么用Java 实现文件剪切,真正的文件剪切!

问题描述 网上搜了不少资料,他们的剪切都是复制然后删除,但是如果在同一个盘下面的话,几个G的文件这样操作会很费时,在windows下同级盘符 进行文件剪切操作的时候,剪切几个G的文件速度很快,这时候用复制删除就很慢了,这涉及到系统底层的文件索引问题,想请问下各位,有没有什么快捷的办法实现windows 下的文件剪切! 解决方案 File类public boolean renameTo(File dest)在windows下同级盘符 就是移动文件

分析安装包lnmp中的apache.sh脚本

分析shell脚本,学习方法,这个其实是在lnmp环境下再安装apache,实现lnmpa环境. #!/bin/bash #定义PATH变量 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin #声明PATH为环境变量 export PATH # Check if user is root #id -u 当前用户的uid,也可以使用反引号`id -u`,效果一样,0为root的用户id if [ $(id