话不多说,直接代码:
#!/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