linux 实现回收站功能

2023-05-16

 

话不多说,直接代码: 

 

#!/bin/sh

# 创建回收站目录
MYRM="/var/tmp/rm"


if [ ! -d ${MYRM} ]; then
    mkdir ${MYRM}
fi


# 移动文件到回收站
function mvFile()
{
    filePath=$1;                # 删除到文件
    rmPath=$2;                  # 回收站目录
    fileName=${filePath##*/};   # 删除到文件名
    fileNoSuf=${fileName%.*};   # 删除到文件名(不包含后缀)
    noSufLen=${#fileNoSuf};     # 不包含后缀到文件名长度,用来计算后缀

    fileSuffix=.${fileName:${noSufLen}}; #文件名到后缀


    tmpFile=${rmPath}/${fileName};
    # 如果回收站中不存在重名文件,直接拷贝,如果存在则重新命名文件名在拷贝
    if [ ! -d $tmpFile ] && [ ! -f $tmpFile ]; then
        mv $filePath $tmpFile 1>&2 2>/dev/null;
    else
        for i in {1..10000}; do
            tmpFile=${rmPath}/${fileNoSuf}\(${i}\)${fileSuffix};
            if [ ! -f $tmpFile ]; then
                mv $filePath $tmpFile 1>&2 2>/dev/null;
                break;
            fi
        done
    fi
}


# 移动目录
function mvDir()
{
    filePath=$1;
    rmPath=$2;
    fileName=${filePath##*/};


    tmpFile=${rmPath}/${fileName};
    # 如果回收站中不存在重名目录,直接拷贝,如果存在则重新命名目录名在拷贝
    if [ ! -d $tmpFile ] && [ ! -f $tmpFile ]; then
        mv $filePath $tmpFile 1>&2 2>/dev/null;
    else
        for i in {1..10000}; do
            tmpFile=${rmPath}/${fileName}\(${i}\);
            if [ ! -d $tmpFile ]; then
                mv $filePath $tmpFile 1>&2 2>/dev/null;
                break;
            fi
        done
    fi
}


#检查输入文件,目录是否存在
for file in $*; do
    # 如果不存在该目录,则移动到该目录,如果存在,则修改文件名在移动
    if [ -d ${file} ]; then
        mvDir $file $MYRM
    fi

    if [ -f $file ]; then
        mvFile $file $MYRM
    fi


# mv -fb $file $MYRM
done

上传新修改后的代码。

#!/bin/bash
# 使用sh 的话, 在ubuntu中由于默认使用的desh, 会在if判断的时候出现 语法错误
# 创建回收站目录
MYRM="/var/tmp/rm"


if [ ! -d ${MYRM} ]; then
    mkdir ${MYRM}
fi


# 移动文件到回收站
function mvFile()
{
    filePath=$1;                 # 删除到文件
    rmPath=$2;                  # 回收站目录
    fileName=${filePath##*/};   # 删除到文件名
    fileNoSuf=${fileName%.*};
    noSufLen=${#fileNoSuf};     # 不包含后缀到文件名长度,用来计算后缀

    fileSuffix=${fileName:${noSufLen}}; #文件名到后缀

    tmpFile=${rmPath}/${fileName};
    # 如果回收站中不存在重名文件,直接拷贝,如果存在则重新命名文件名在拷贝
    if [ ! -d $tmpFile ] && [ ! -f $tmpFile ]; then
        mv $filePath $tmpFile 1>&2 2>/dev/null;
    else
        for i in {1..10000}; do
            tmpFile=${rmPath}/${fileNoSuf}{$i}${fileSuffix};
            #echo tmpFile = $tmpFile
            if [ ! -e $tmpFile ] ; then
                #mv $filePath $tmpFile 1>&2 2>/dev/null;
                mv $filePath $tmpFile 
                break;
            fi
        done
    fi
}

# 移动目录
function mvDir()
{
    filePath=$1;                 # 删除到文件

    while true
    do
        final=${filePath:0-1:1};       # 获取最后一个字符, 判断是否是 /  斜杠 
        if [ "$final" = "/" ]; then
            filelen=${#filePath}-1;
            filePath=${filePath:0:${filelen}}
            continue;
        fi
        break;
    done

    mvFile $filePath $2
}


#检查输入文件,目录是否存在
for file in $*; do
    if [ ! -e ${file} ]; then
        echo cannot stat \'$1\' :No such file or directory
        break;
    fi
    # 如果不存在该目录,则移动到该目录,如果存在,则修改文件名在移动
    if [ -d ${file} ]; then
        mvDir $file $MYRM
        break;
    fi

    mvFile $file $MYRM
done

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux 实现回收站功能 的相关文章

随机推荐