Skip to content

Instantly share code, notes, and snippets.

@Steve-Mcl
Created May 15, 2020 10:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Steve-Mcl/5f3bf35079ec128a8ddb11180da279ad to your computer and use it in GitHub Desktop.
Save Steve-Mcl/5f3bf35079ec128a8ddb11180da279ad to your computer and use it in GitHub Desktop.
Find newest file in a directory

A quick demo flow using fs-ops nodes to demonstrate how you could find the newest file in a directory.

To use...

  • Copy the flow
  • In node-red, press CTRL+I (to open the Import dialog)
  • Paste in your flow
  • Edit the inject node and set the payload to the directory of interest

Results...

The final msg.payload will contain an object with details of the newest file e.g..

{
   "path":"c:\\temp",
   "file":"c1.csv",
   "dev":4207262028,
   "mode":33206,
   "nlink":1,
   "uid":0,
   "gid":0,
   "rdev":0,
   "blksize":4096,
   "ino":7318349394751424,
   "size":827058,
   "blocks":1616,
   "atimeMs":1589535873903.5276,
   "mtimeMs":1585514722694.695,
   "ctimeMs":1589535882149.371,
   "birthtimeMs":1589535873878.613,
   "atime":"2020-05-15T09:44:33.904Z",
   "mtime":"2020-03-29T20:45:22.695Z",
   "ctime":"2020-05-15T09:44:42.149Z",
   "birthtime":"2020-05-15T09:44:33.879Z"
}

TIP: You can also filter file types (e.g. CSV files) by setting the filter field in the fs-directory node

[{"id":"6456763b.e07d78","type":"fs-ops-dir","z":"6ef1cfb5.30ff2","name":"","path":"payload","pathType":"msg","filter":"*.csv","filterType":"str","dir":"files","dirType":"msg","x":380,"y":460,"wires":[["35811671.90ebea","572a14c4.62aa3c"]]},{"id":"35811671.90ebea","type":"fs-ops-stats","z":"6ef1cfb5.30ff2","name":"","path":"payload","pathType":"msg","filename":"files","filenameType":"msg","stats":"stats","sizeType":"msg","x":540,"y":460,"wires":[["20ef5f9.b8d63a","ee6515ea.f968c8"]]},{"id":"7dbdf6ef.a73868","type":"inject","z":"6ef1cfb5.30ff2","name":"","topic":"","payload":"c:\\temp","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":250,"y":460,"wires":[["6456763b.e07d78"]]},{"id":"dd9228cf.983768","type":"debug","z":"6ef1cfb5.30ff2","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"combined","targetType":"msg","x":940,"y":520,"wires":[]},{"id":"572a14c4.62aa3c","type":"debug","z":"6ef1cfb5.30ff2","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"files","targetType":"msg","x":520,"y":520,"wires":[]},{"id":"20ef5f9.b8d63a","type":"debug","z":"6ef1cfb5.30ff2","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"stats","targetType":"msg","x":720,"y":520,"wires":[]},{"id":"ee6515ea.f968c8","type":"function","z":"6ef1cfb5.30ff2","name":"Combine and sort","func":"var combined = [];\n\nfor (var i = 0; i < msg.files.length; i++) {\n var file = msg.files[i];\n var stat = msg.stats[i];\n \n combined.push({\n path: msg.payload,\n file,\n ...stat\n })\n}\n\ncombined.sort((a, b) => b.birthtimeMs - a.birthtimeMs);\n\nmsg.combined = combined;\nreturn msg;","outputs":1,"noerr":0,"x":730,"y":460,"wires":[["dd9228cf.983768","50034043.e2347"]]},{"id":"50034043.e2347","type":"change","z":"6ef1cfb5.30ff2","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"combined[0]","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":940,"y":460,"wires":[["4f9068e.e12c498"]]},{"id":"4f9068e.e12c498","type":"debug","z":"6ef1cfb5.30ff2","name":"newest CSV","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":1110,"y":460,"wires":[]},{"id":"25428842.245c68","type":"comment","z":"6ef1cfb5.30ff2","name":"Directory gets list of CSVs. File Stats gets their details. combine and sort puts data together and sorts. Switch node takes 1st item and puts it in payload","info":"","x":700,"y":400,"wires":[]}]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment