swift腳本檢查flutter同名文件

由于flutter允許同名文件存在不同路徑下,當我們項目代碼文件存在復(fù)制粘貼情況的時候,并不會編譯報錯,
重復(fù)文件都會參與編譯,造成調(diào)用的不確定性,導致未知bug.
所以我寫了一個swift腳本,可以篩選出項目中指定路徑下的同名文件,并且輸出json文件到桌面

腳本文件名為 Yann_Scan_duplicateFiles.swift
執(zhí)行腳本 swift /Users/yann_dev/Desktop/Yann_Scan_duplicateFiles.swift

源代碼如下

import Foundation

// 清理文件路徑中的多余斜線
func cleanFilePath(_ path: String) -> String {
    let components = path.components(separatedBy: "/")
    return components.filter { !$0.isEmpty }.joined(separator: "/")
}

// 定義一個函數(shù),用于掃描指定文件夾及其子目錄下的所有文件讹语,并返回同名文件的路徑
func scanDirectoriesForSameFileName(inFolders folders: [String]) -> [String: [String]] {
    var sameFileNamePaths = [String: [String]]()
    let fileManager = FileManager.default
    
    for folder in folders {
        guard let enumerator = fileManager.enumerator(atPath: folder) else {
            print("無法獲取文件夾 \(folder) 的內(nèi)容")
            continue
        }
        
        for case let element as String in enumerator {
            let filePath = "\(folder)/\(element)"
            var isDirectory: ObjCBool = false
            
            if fileManager.fileExists(atPath: filePath, isDirectory: &isDirectory) && !isDirectory.boolValue {
                let fileName = URL(fileURLWithPath: filePath).lastPathComponent
                let cleanedPath = cleanFilePath(filePath)
                if sameFileNamePaths[fileName] == nil {
                    sameFileNamePaths[fileName] = [cleanedPath]
                } else {
                    // 如果該文件路徑已經(jīng)在同名文件的路徑數(shù)組中钙皮,就不再添加
                    if !sameFileNamePaths[fileName]!.contains(cleanedPath) {
                        sameFileNamePaths[fileName]?.append(cleanedPath)
                    }
                }
            }
        }
    }
    
    // 只保留至少有兩個路徑的文件
    sameFileNamePaths = sameFileNamePaths.filter { $0.value.count > 1 }
    
    return sameFileNamePaths
}

// 獲取當前日期時間,并格式化為年月日-時分秒
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyyMMdd-HHmmss"
let currentDateAndTime = dateFormatter.string(from: Date())

// 獲取用戶輸入的文件夾路徑列表
print("請輸入要掃描的文件夾路徑,用逗號分隔:")
if let inputFolders = readLine()?.components(separatedBy: ",") {
    // 調(diào)用函數(shù)短条,掃描指定文件夾及其子目錄下的所有文件导匣,并輸出同名文件的文件名
    let sameFileNamePaths = scanDirectoriesForSameFileName(inFolders: inputFolders)
    
    if sameFileNamePaths.isEmpty {
        print("未找到同名文件。")
    } else {
        // 將結(jié)果轉(zhuǎn)換為 JSON 格式
        do {
            let desktopURL = FileManager.default.urls(for: .desktopDirectory, in: .userDomainMask).first!
            let jsonFileName = "\(currentDateAndTime).json"
            let jsonFileURL = desktopURL.appendingPathComponent(jsonFileName)
            
            let jsonData = try JSONSerialization.data(withJSONObject: sameFileNamePaths, options: [.prettyPrinted, .withoutEscapingSlashes])
            try jsonData.write(to: jsonFileURL)
            
            print("JSON 文件已保存到桌面:\(jsonFileURL.path)")
        } catch {
            print("保存 JSON 文件時出錯:\(error)")
        }
    }
} else {
    print("無效的輸入茸时。")
}


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贡定,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子可都,更是在濱河造成了極大的恐慌缓待,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渠牲,死亡現(xiàn)場離奇詭異命斧,居然都是意外死亡,警方通過查閱死者的電腦和手機嘱兼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門国葬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人芹壕,你說我怎么就攤上這事汇四。” “怎么了踢涌?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵通孽,是天一觀的道長。 經(jīng)常有香客問我睁壁,道長背苦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任潘明,我火速辦了婚禮行剂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘钳降。我一直安慰自己厚宰,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布遂填。 她就那樣靜靜地躺著铲觉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吓坚。 梳的紋絲不亂的頭發(fā)上撵幽,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音礁击,去河邊找鬼盐杂。 笑死漏麦,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的况褪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼更耻,長吁一口氣:“原來是場噩夢啊……” “哼测垛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起秧均,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤食侮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后目胡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锯七,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年誉己,在試婚紗的時候發(fā)現(xiàn)自己被綠了眉尸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡噪猾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出筑累,到底是詐尸還是另有隱情袱蜡,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布慢宗,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜扶平,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦惑惶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽理卑。三九已至宇立,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間润脸,已是汗流浹背垦巴。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工憔披, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蔗候,地道東北人勘畔。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓爬立,卻偏偏與公主長得像,于是被迫代替她去往敵國和親万哪。 傳聞我的和親對象是個殘疾皇子侠驯,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353