windows下批量删除Mac下的隐藏文件

以下脚本包含删除以"._"和".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}"

你可能感兴趣的:(windows下批量删除Mac下的隐藏文件)