folder-contents
List the contents of a folder recursively or not. Use the options.
Usage
With options
var folderContents = require('folder-contents');
var options = {
"path":".",
"separator":".",
"recursively":false,
"method":"simple",
"useBasePath":true,
"filter":{
"extensionIgnore":[],
"extensionAccept":[],
"folderIgnore":[],
"fileIgnore":[]
},
"date":true, // See doc for patterns and i18n
"size":true, // See doc for patterns and i18n
"useFullPath":false
};
var jsonResult = folderContents(options);
// console.log(jsonResult);
// console.log(JSON.stringify(jsonResult));
Without options
var folderContents = require('folder-contents');
// console.log(folderContents());
Details for options
path
: ( string )
- default path is
./
(don't add last/
if you use this option).
separator
: ( string )
- default extension separator is
.
recursively
: ( bool )
- default to
false
. If set attrue
list recursively files for all subsolder levels.
method
: ( string )
simple
: return simple json list with files. (is default)simpleExtension
: return simple json object with list(s) of file(s) by extension.simplePath
: return simple json object with list(s) of file(s) by folder.complexPath
: return complex json structure based on path (More operations).
useBasePath
: ( bool )
- default to
true
. If set atfalse
, base path is not returned in result. - for example if you list
./test
as root folder,./test
will not appear in file"path"
and"fpath"
values
filter.extensionIgnore
: ( JSON.[ ] )
- List of extension ( string ) to ignore.
- IS CASE INSENSITIVE.
- If
filter.extensionAccept
is used,filter.extensionIgnore
is ignored ;p
filter.extensionAccept
: ( JSON.[ ] )
- List of extension ( string ) to accept.
- IS CASE INSENSITIVE.
filter.folderIgnore
( JSON.[ ] )
- List of folder name ( string ) to ignore.
- Is case sensitive.
filter.fileIgnore
( JSON.[ ] )
- List of file name ( string ) to ignore.
- Is case sensitive.
- Add names without extensions.
date :
( bool | string )
- Default date value is
true
. Return timestamp foratime
,ctime
andmtime
in json result. - If you don't want dates in json result, set this value to
false
. - If you want formated dates set a string (See npm dateformat package for patterns).
Exemple date string format :
"yyyy/mm/dd - HH:MM:ss"
Foratime
,ctime
andmtime
please see : Linux info page
size :
( bool | JSON.{ } )
-
default size value is
true
, return size in byte for each files. -
If you don't want size in json result, set this value to
false
. -
If you want formated size use this json object :
{ "b":"b or B or o(for french) or what you want ...", "kb":"kb", "mb":"mb", "gb":"gb", "tb":"tb" }
useFullPath
: ( bool )
- default to false, if set to true
fpath
value is added for each files.
Examples
For examples I use these files and my js app is in ./
folder :
./test/.htaccess
./test/photo.JPG
./test/subfolder/film.mkv
Examples for basic config
Example A1 : default result for simple methode
(not recursive)
In this exemple, options are sames because we don't use recursivity
-
default methode is
simple
-
complexPath
is set tosimple
whenrecursively
is not defined or false. -
simplePath
is set tosimple
whenrecursively
is not defined or false.var folderContents = require('folder-contents'); var options = { "path":"./test" }; options = { "path":"./test", "method":"simple" }; options = { "path":"./test", "method":"simplePath" }; options = { "path":"./test", "method":"complexPath" }; var result = folderContents(options); console.log(JSON.stringify(result)); // Log result : { ".files": [ { "path": "./test", "name": "", "ext": "htaccess", "size": 421, "atime": 1402061211000, "mtime": 1402061211000, "ctime": 1402061200000 }, { "path": "./test", "name": "photo", "ext": "JPG", "size": 2760113, "atime": 1402061374000, "mtime": 1216722663000, "ctime": 1402061374000 } ], ".folders": [ "subfolder" ] }
Example A2 : default result for simpleExtension methode
(not recursive)
var folderContents = require('folder-contents');
options = {
"path":"./test",
"method":"simpleExtension"
};
var result = folderContents(options);
console.log(JSON.stringify(result));
{
"htaccess": [
{
"path": "./test",
"name": "",
"ext": "htaccess",
"size": 421,
"atime": 1402061211000,
"mtime": 1402061211000,
"ctime": 1402061200000
}
],
"JPG": [
{
"path": "./test",
"name": "photo",
"ext": "JPG",
"size": 2760113,
"atime": 1402061374000,
"mtime": 1216722663000,
"ctime": 1402061374000
}
],
".folders": [
"subfolder"
]
}
Examples for recursive config
Example B1 : default result for simple methode
var folderContents = require('folder-contents');
var options = {
"path":"./test",
"recursively":true
};
var result = folderContents(options);
console.log(JSON.stringify(result));
// Log result :
[
{
"path": "./test",
"name": "",
"ext": "htaccess",
"size": 421,
"atime": 1402061211000,
"mtime": 1402061211000,
"ctime": 1402061200000
},
{
"path": "./test",
"name": "photo",
"ext": "JPG",
"size": 2760113,
"atime": 1402061374000,
"mtime": 1216722663000,
"ctime": 1402061374000
},
{
"path": "./test/subfolder",
"name": "film",
"ext": "mkv",
"size": 703836104,
"atime": 1402061717000,
"mtime": 1369822031000,
"ctime": 1402061717000
}
]
Example B2 : default result for simpleExtension methode
var folderContents = require('folder-contents');
var options = {
"path":"./test",
"method":"simpleExtension",
"recursively":true
};
var result = folderContents(options);
console.log(JSON.stringify(result));
// Log result :
{
"htaccess": [
{
"path": "./test",
"name": "",
"ext": "htaccess",
"size": 421,
"atime": 1402061211000,
"mtime": 1402061211000,
"ctime": 1402061200000
}
],
"JPG": [
{
"path": "./test",
"name": "photo",
"ext": "JPG",
"size": 2760113,
"atime": 1402061374000,
"mtime": 1216722663000,
"ctime": 1402061374000
}
],
"mkv": [
{
"path": "./test/subfolder",
"name": "film",
"ext": "mkv",
"size": 703836104,
"atime": 1402061717000,
"mtime": 1369822031000,
"ctime": 1402061717000
}
]
}
Example B3 : default result for simplePath methode
var folderContents = require('folder-contents');
var options = {
"path":"./test",
"method":"simplePath",
"recursively":true
};
var result = folderContents(options);
console.log(JSON.stringify(result));
// Log result :
{
"./test/": [
{
"path": "./test",
"name": "",
"ext": "htaccess",
"size": 421,
"atime": 1402061211000,
"mtime": 1402061211000,
"ctime": 1402061200000
},
{
"path": "./test",
"name": "photo",
"ext": "JPG",
"size": 2760113,
"atime": 1402061374000,
"mtime": 1216722663000,
"ctime": 1402061374000
}
],
"./test/subfolder/": [
{
"path": "./test/subfolder",
"name": "film",
"ext": "mkv",
"size": 703836104,
"atime": 1402061717000,
"mtime": 1369822031000,
"ctime": 1402061717000
}
]
}
Example B4 : default result for complexPath methode
var folderContents = require('folder-contents');
var options = {
"path":"./test",
"method":"complexPath",
"recursively":true
};
var result = folderContents(options);
console.log(JSON.stringify(result));
// Log result :
{
".": {
"test": {
".files": [
{
"path": "./test",
"name": "",
"ext": "htaccess",
"size": 421,
"atime": 1402061211000,
"mtime": 1402061211000,
"ctime": 1402061200000
},
{
"path": "./test",
"name": "photo",
"ext": "JPG",
"size": 2760113,
"atime": 1402061374000,
"mtime": 1216722663000,
"ctime": 1402061374000
}
],
"subfolder": {
".files": [
{
"path": "./test/subfolder",
"name": "film",
"ext": "mkv",
"size": 703836104,
"atime": 1402061717000,
"mtime": 1369822031000,
"ctime": 1402061717000
}
]
}
}
}
}
Now you can find ./test
files like this :
result['.']['test']['.files']
Use folder ./test/subfolder
:
result['.']['test']['subfolder']
And ./test/subfolder
file(s) :
result['.']['test']['subfolder']['.files']
Examples for dates / size / filter and fpath
Example C1 : use filter.extensionIgnore
and useFullPath
You can see fpath value in json result and jpg
file in no longer returned.
var folderContents = require('folder-contents');
var options = {
"path":"./test",
"filter":{
"extensionIgnore":['jpg']
},
"useFullPath": true
};
var result = folderContents(options);
console.log(JSON.stringify(result));
// Log result :
{
".files": [
{
"path": "./test",
"name": "",
"ext": "htaccess",
"fpath": "./test/.htaccess",
"size": 421,
"atime": 1402061211000,
"mtime": 1402061211000,
"ctime": 1402061200000
}
],
".folders": [
"subfolder"
]
}
Example C2 : use size
and date
to false
Case for minimum informations
var folderContents = require('folder-contents');
var options = {
"path":"./test",
"date":false,
"size": false
};
var result = folderContents(options);
console.log(JSON.stringify(result));
// Log result :
{
".files": [
{
"path": "./test",
"name": "",
"ext": "htaccess"
},
{
"path": "./test",
"name": "photo",
"ext": "JPG"
}
],
".folders": [
"subfolder"
]
}
Example C3 : use patterns/format for date
and size
var folderContents = require('folder-contents');
var options = {
"path":"./test",
"date":"yyyy/mm/dd - HH:MM:ss",
"size":{
"b":" B...",
"kb":" kB...",
"mb":" mB...",
"gb":" gB...",
"tb":" tB..."
}
};
var result = folderContents(options);
console.log(JSON.stringify(result));
// Log result :
{
".files": [
{
"path": "./test",
"name": "",
"ext": "htaccess",
"size": "421 B...",
"atime": "2014/06/06 - 15:26:51",
"mtime": "2014/06/06 - 15:26:51",
"ctime": "2014/06/06 - 15:26:40"
},
{
"path": "./test",
"name": "photo",
"ext": "JPG",
"size": "2.63 mB...",
"atime": "2014/06/06 - 15:29:34",
"mtime": "2008/07/22 - 12:31:03",
"ctime": "2014/06/06 - 15:29:34"
}
],
".folders": [
"subfolder"
]
}
**Example C4 : set useBasePath
to false
var folderContents = require('folder-contents');
var options = {
"path":"./test",
"useBasePath":false,
"recursively":true
};
var result = folderContents(options);
console.log(JSON.stringify(result));
// Log result :
[
{
"path": "/",
"name": "",
"ext": "htaccess",
"size": 421,
"atime": 1402061211000,
"mtime": 1402061211000,
"ctime": 1402061200000
},
{
"path": "/",
"name": "photo",
"ext": "JPG",
"size": 2760113,
"atime": 1402061374000,
"mtime": 1216722663000,
"ctime": 1402061374000
},
{
"path": "/subfolder",
"name": "film",
"ext": "mkv",
"size": 703836104,
"atime": 1402061717000,
"mtime": 1369822031000,
"ctime": 1402061717000
}
]
Versions
v 1.1.0 - 2014/06/18
I am working on my other project (folder-to-ui),and I use this package. So I found improvements that are not backward compatible.
- In listed files, I change
"path"
value content for json result.- I don't add end
/
so./test/
will now./test
in json result
- I don't add end
- It is now possible to set
useBasePath
option to false- if
useBasePath
set to false,path
andfpath
will change in json result path
for./test
will be/
if root folder is./test
path
for./test/subfolder
will be/subfolder
if root folder is./test
- As you can see if listed file is in root folder I add
/
. Only case with end/
- For this option you can see Examples B1 and C4 to compare differences.
- if
v 1.0.0 - 2014/06/10
- Lot of fixs, changes and optimizations since 0.1.0 version.
- Please read documentation
- Add option
recursively
. Default is false !!! - Fix very hot bug in option path copy in recursive function...
- In conclusion this version will suit many uses.
v 0.1.0 - 2014/06/08
- Add file dates : atime, ctime, mtime (timestamp).
- Date added if
dates
option is enabled. - Date is formatted if
dateFormat
option is configured. - Add file full path : fpath, enabled if
fullPath
option is enabled.
v 0.0.9 - 2014/06/07
- Add resultJsonStruct option.
- Optimizing options initialization.
v 0.0.8 - 2014/06/06
- Add byte unit translation.
extIgnore
is now case insensitive.extAccept
is now case insensitive.
v 0.0.6 - 2014/06/06
- Size is now displayable, using package bytes-i18n
v 0.0.5 - 2014/06/05
-
Add size in result.