فهرست منبع

Allow filtering by regular expressions

Fixes #49
Tor Arne Vestbø 4 سال پیش
والد
کامیت
3ab12840a8
3فایلهای تغییر یافته به همراه21 افزوده شده و 6 حذف شده
  1. 4 2
      Readme.md
  2. 6 1
      tools/cli.js
  3. 11 3
      tools/reports/backup/files.js

+ 4 - 2
Readme.md

@@ -118,9 +118,11 @@ the `--extract <path>` parameter paired with the backup.files report will extrac
 To limit which files are extracted, pass one or more filters via `--filter <filter>`.
 Each filter must match for the file to be included.
 
+Regular expression filters can be passed by `--regex-filter <filter>`.
+
 ```bash
-# Export all photos onto "~/Desktop/Photos"
-ibackuptool -b $UDID -r backup.files --extract ~/Desktop/Photos --filter DCIM
+# Export all JPEG photos onto "~/Desktop/Photos"
+ibackuptool -b $UDID -r backup.files --extract ~/Desktop/Photos --filter DCIM --regex-filter '\.(jpg|JPG|jpeg|JPEG)$'
 ```
 
 ## Running Tests

+ 6 - 1
tools/cli.js

@@ -38,6 +38,7 @@ program
   .option(`-v, --verbose`, 'Verbose debugging output')
   .option(`    --plugins <plugins>`, 'List of pluging modules to use')
   .option(`    --filter <filter...>`, 'Filters output for individual reports.')
+  .option(`    --regex-filter <filter...>`, 'Filters output for individual reports using a regular expression.')
   .option('    --join-reports', 'Join JSON reports together. (available for -f json or -f raw only!)')
   .option(`    --no-color`, 'Disable colorized output')
   .option(`    --dump`, 'alias for "--formatter raw"')
@@ -183,11 +184,15 @@ async function main () {
         try {
           log.begin('run', report.name)
 
+          var filters = program.filter || [];
+          for (var filter of program.regexFilter || [])
+            filters.push(new RegExp(filter));
+
           // Create some parameters to send by default.
           let params = {
             backup: program.backup,
             extract: program.extract,
-            filter: program.filter,
+            filter: filters,
             id: program.id,
             raw: !!program.formatter.isRaw
           }

+ 11 - 3
tools/reports/backup/files.js

@@ -108,9 +108,17 @@ function isIncludedByFilter (filter, item, filePath) {
 }
 
 function isIncludedBySingleFilter (filter, item, filePath) {
-  return item.domain.indexOf(filter) > -1 ||
-    item.filename.indexOf(filter) > -1 ||
-    filePath.indexOf(filter) > -1;
+  for (var x of [item.domain, item.filename, filePath]) {
+    if (isIncludedBySingleFilterCheck(filter, x))
+      return true;
+  }
+}
+
+function isIncludedBySingleFilterCheck (filter, x) {
+  if (filter instanceof RegExp)
+    return x.search(filter) > -1
+  else
+    return x.indexOf(filter) > -1;
 }
 
 /// Extract files