以下脚本包含删除以"._"和".pbb"的文件。
由于脚本是bash shell,所以在Windows上是不能运行的,因此需要借助三方工具进行运行。我用的是cygwin,找到Installing Cygwin
直接下载对应平台安装包,根据提示默认安装完场即可;
安装完成后即可在cygwin中运行bash shell;
将下面的脚本复制到.sh的文件中保存,将文件拖到cygwin窗口回车即可运行,运行成功要求输入指定的路径,接着脚本会遍历改路径下所有的文件和文件夹,找出隐藏文件和特定后缀的文件;
/cygdrive/c/
为Cygwin的映射;
handLog="/cygdrive/c/Users/Administrator/Desktop/pbbFileHand.log"
# handLog="pbbFileHand.log"
echo "操作日志:${handLog}"
touch "${handLog}"
hitFile="/cygdrive/c/Users/Administrator/Desktop/hitFile.txt"
# hitFile="hitFile.txt"
touch "${hitFile}"
echo " ------------------ `Date` ------------------ " >> "${handLog}"
echo " 命中文件:${hitFile}" >> "${handLog}"
echo " ------------------ `Date` ------------------" >> ${hitFile}
function recursionDir () {
# 传入的路径,注意使用临时变量,否则自动视为生命周期中的全局变量
local dir=$1
if [[ -e "${dir}" ]]; then
# 注意文件路径不对时,文件为空;路径是目录时,文件是特殊文件;
# 需要向下一级寻找,-a 获取所有
# 文件名中有空个时,ls会换行处理;有"/"时,ls会处理成":"
# 在使用"rm"时,系统对文件名中的"/"使用":"表示
originChar="[ ]"
targetChar="[^]"
for file in `ls -a "${dir}" | tr "${originChar}" "${targetChar}" `; do
dot="."
dotDot=".."
# 将"^"替换回" "
file=`echo ${file} | tr "[${targetChar}]" "[${originChar}]" `
if [[ ${file} == ${dot} ]]; then
continue
fi
if [[ ${file} == ${dotDot} ]]; then
continue
fi
# 不使用local,同for循环周期
filePath=${dir}/${file}
echo "文件 ${filePath}"
echo "${filePath}" >> "${handLog}"
if [[ -d "${filePath}" ]]; then
recursionDir "${filePath}"
else
deleteHideFile "${filePath}" "${file}"
# 如果存在.pbb文件就删除
deletePBBFile "${filePath}.pbb"
fi
done
else
deleteHideFile "${dir}"
fi
}
function deleteHideFile () {
if [[ -f "$1" ]]; then
local fileName=$2
begin=`echo ${fileName:0:2}`
end=`echo ${fileName:0-4:4}`
prefix="._"
suffix=".pbb"
if [[ ${begin} == ${prefix} ]]; then
# if [[ "${end}" == "${suffix}" ]]
# then
# echo "begin: ${begin}"
# echo "end: ${end}"
echo "命中文件:$1"
echo "$1" >> "${hitFile}"
# 将有特殊符号的文件名当着整个字符串传入进行删除
rm "$1"
if [[ $? == 0 ]];
then
echo "$1 隐藏文件,已移除" >> "${handLog}"
else
echo "$1 隐藏文件,移除失败" >> "${handLog}"
fi
# fi
fi
fi
}
function deletePBBFile () {
if [[ -e $1 ]]; then
echo "wc -c filename | awk '{print $1}'"
rm "$1"
if [[ $? == 0 ]];
then
echo "$1 PBB文件,已移除" >> "${handLog}"
else
echo "$1 PBB文件,移除失败" >> "${handLog}"
fi
fi
}
echo "输入指定的路径:"
read tempDir
## 不能使用‘~’指定当前用户
# tempDir="/Users/niko/Documents/CSII/CSIICore_iOS.zip"
# cd "${tempDir}"
recursionDir "${tempDir}"