Skip to content

Commit ed91712

Browse files
committed
[feat]: find files and folders
1 parent 05b5e7f commit ed91712

File tree

2 files changed

+64
-0
lines changed

2 files changed

+64
-0
lines changed

Sources/ScriptToolkit/FileExtension.swift

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,4 +141,36 @@ public extension File {
141141
run(ScriptToolkit.pdfCropPath, "--margins", insets.left, insets.top, insets.right, insets.bottom, path, newName)
142142
return try File(path: newName)
143143
}
144+
145+
////////////////////////////////////////////////////////////////////////////////
146+
// MARK: - Find files
147+
148+
public func findFirstFile(name: String, root: Folder) -> File? {
149+
for file in root.makeFileSequence(recursive: true) {
150+
if file.name == name {
151+
return file
152+
}
153+
}
154+
return nil
155+
}
156+
157+
public func findFiles(name: String, root: Folder) -> [File] {
158+
var foundFiles = [File]()
159+
for file in root.makeFileSequence(recursive: true) {
160+
if file.name == name {
161+
foundFiles.append(file)
162+
}
163+
}
164+
return foundFiles
165+
}
166+
167+
public func findFiles(regex: String, root: Folder) -> [File] {
168+
var foundFiles = [File]()
169+
for file in root.makeFileSequence(recursive: true) {
170+
if !matches(for: regex, in: file.name).isEmpty {
171+
foundFiles.append(file)
172+
}
173+
}
174+
return foundFiles
175+
}
144176
}

Sources/ScriptToolkit/FolderExtension.swift

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,5 +174,37 @@ public extension Folder {
174174
try delete()
175175
}
176176
}
177+
178+
////////////////////////////////////////////////////////////////////////////////
179+
// MARK: - Find folders
180+
181+
public func findFirstFolder(name: String, root: Folder) -> Folder? {
182+
for folder in root.makeSubfolderSequence(recursive: true) {
183+
if folder.name == name {
184+
return folder
185+
}
186+
}
187+
return nil
188+
}
189+
190+
public func findFolders(name: String, root: Folder) -> [Folder] {
191+
var foundFolders = [Folder]()
192+
for folder in root.makeSubfolderSequence(recursive: true) {
193+
if folder.name == name {
194+
foundFolders.append(folder)
195+
}
196+
}
197+
return foundFolders
198+
}
199+
200+
public func findFolders(regex: String, root: Folder) -> [Folder] {
201+
var foundFolders = [Folder]()
202+
for folder in root.makeSubfolderSequence(recursive: true) {
203+
if !matches(for: regex, in: folder.name).isEmpty {
204+
foundFolders.append(folder)
205+
}
206+
}
207+
return foundFolders
208+
}
177209
}
178210

0 commit comments

Comments
 (0)