FileSniffer
Flexible and fluent interface for searching files or search for files by content
Common examples
Collector functions
Search a specific file
Searches for str
in someFile
and return matches as an array
const {FileSniffer, asArray} = require('filesniffer');
const someFile = ...
const matches = await FileSniffer
.create()
.path(someFile)
.collect(asArray())
.find();
console.log(matches);
Search a list of files
Searches for str
in arrayOfFiles
and return matches as an array
const {FileSniffer, asArray} = require('filesniffer');
const arrayOfFiles = [...];
const matches = await FileSniffer
.create()
.paths(arrayOfFiles)
.collect(asArray())
.find();
console.log(matches);
Search a directory
Searches for str
in someDirectory
and return matches as an array
const {FileSniffer, asArray} = require('filesniffer');
const someDirectory = ...
const matches = await FileSniffer
.create()
.path(someDirectory)
.collect(asArray())
.find();
console.log(matches);
Search a directory recursively
Recursively searches for str
in someDirectory
and return matches as an array
const {FileSniffer, asArray} = require('filesniffer');
const someDirectory = ...
const matches = await FileSniffer
.create()
.path(someDirectory)
.depth(10) // 10 levels
.collect(asArray())
.find();
console.log(matches);
Return matches as an object
Searches for str
in someFile
and return matches as an object
const {FileSniffer, asObject} = require('filesniffer');
const someFile = ...
const matches = await FileSniffer
.create()
.path(someFile)
.collect(asObject())
.find();
console.log(matches); // pathname -> array of matches
Advanced search criteria
FileHound in combination with the FileSniffer.paths
method
can be used for specific file searches:
For example, only search text files and ignore hidden directories:
const {FileSniffer, asObject} = require('filesniffer');
const FileHound = require('filehound');
const files = await FileHound
.create() // cwd
.ext('.txt')
.ignoreHiddenDirectories()
.find();
const someFile = ...
const matches = await FileSniffer
.create()
.paths(files)
.collect(asObject())
.find();
console.log(matches); // pathname -> array of matches
Write a custom collector
Searches for str
in someFile
and writes matches to another file
const {FileSniffer, asObject, Collector} = require('filesniffer');
// Custom collector written in Typescript
class ToFile implements Collector {
private file;
constructor(file) {
this.file = fs.createWriteStream(file);
}
collect(line, meta) {
this.file.write(line);
}
matches() {
this.file.end();
return this.results;
}
}
const someFile = ...
const targetFile = ...
const matches = await FileSniffer
.create()
.collect(new ToFile(targetFile))
.find('str');
console.log(matches); // pathname -> array of matches
Event based searches
Search files (recursion off) in the current working directory
Searches the current working directory for files containing the string some string
:
const sniffer = await FileSniffer.create();
// register event handlers
sniffer.on('match', (filename, line) => {
console.log(`Matching line ${line} found in ${filename}`);
});
sniffer.on('end', (filenames) => {
console.log(`All files that match: ${filenames}`);
});
// start search
sniffer.find('some string');
Search files in a specific directory
Recursively search from /tmp
for files containing myPattern
const sniffer = await FileSniffer
.create()
.path('/tmp');
sniffer.on('end', (filenames) => {
console.log(filenames);
});
sniffer.find(/myPattern/);
Search a given list of files
Searches list of files for myPattern
:
const files = [
'/tmp/file1.txt',
'/tmp/file2.txt'
];
const sniffer = await FileSniffer
.create()
.paths(files);
sniffer.on('end', (filenames) => {
console.log(filenames);
});
sniffer.find(/myPattern/);
Get matching content
Listen to a match event to get all lines that match myPattern
const sniffer = await FileSniffer
.create()
.path(file);
const matchingLines = [];
sniffer.on('match', (filename, line) => {
lines.push(line);
});
sniffer.find(/myPattern/);
Search gzip files
Search files, including gzip files, in dir
, containing myPattern
const path = require('path');
const sniffer = await FileSniffer
.create(dir)
.gzip();
sniffer.on('match', (filename, line) => {
if (path.extname(filename) === '.gz') {
console.log(`Found ${line} in gzip file`)
}
});
sniffer.find(/myPattern/);