# Watch sandbox directory for changes

You can watch a directory for changes using the `files.watchDir()` method in JavaScript and `files.watch_dir()` method in Python.

<Note>
Since events are tracked asynchronously, their delivery may be delayed.
It's recommended not to collect or close watcher immediately after making a change.
</Note>

<CodeGroup>
```js
import { Sandbox, FilesystemEventType } from '@e2b/code-interpreter'

const sandbox = await Sandbox.create()
const dirname = '/home/user'

// Start watching directory for changes
const handle = await sandbox.files.watchDir(dirname, async (event) => { // $HighlightLine
  console.log(event) // $HighlightLine
  if (event.type === FilesystemEventType.WRITE) { // $HighlightLine
    console.log(`wrote to file ${event.name}`) // $HighlightLine
  } // $HighlightLine
}) // $HighlightLine

// Trigger file write event
await sandbox.files.write(`${dirname}/my-file`, 'hello')
```
```python
from e2b_code_interpreter import Sandbox

sandbox = Sandbox.create()
dirname = '/home/user'

# Watch directory for changes
handle = sandbox.files.watch_dir(dirname) # $HighlightLine
# Trigger file write event
sandbox.files.write(f"{dirname}/my-file", "hello")

# Retrieve the latest new events since the last `get_new_events()` call
events = handle.get_new_events() # $HighlightLine
for event in events: # $HighlightLine
  print(event) # $HighlightLine
  if event.type == FilesystemEventType.Write: # $HighlightLine
    print(f"wrote to file {event.name}") # $HighlightLine
```
</CodeGroup>


## Recursive Watching

You can enable recursive watching using the parameter `recursive`.

<Note>
When rapidly creating new folders (e.g., deeply nested path of folders), events other than `CREATE` might not be emitted. To avoid this behavior, create the required folder structure in advance.
</Note>

<CodeGroup>
```js
import { Sandbox, FilesystemEventType } from '@e2b/code-interpreter'

const sandbox = await Sandbox.create()
const dirname = '/home/user'

// Start watching directory for changes
const handle = await sandbox.files.watchDir(dirname, async (event) => {
  console.log(event)
  if (event.type === FilesystemEventType.WRITE) {
    console.log(`wrote to file ${event.name}`)
  }
}, {
  recursive: true // $HighlightLine
})

// Trigger file write event
await sandbox.files.write(`${dirname}/my-folder/my-file`, 'hello') // $HighlightLine
```
```python
from e2b_code_interpreter import Sandbox

sandbox = Sandbox.create()
dirname = '/home/user'

# Watch directory for changes
handle = sandbox.files.watch_dir(dirname, recursive=True) # $HighlightLine
# Trigger file write event
sandbox.files.write(f"{dirname}/my-folder/my-file", "hello") # $HighlightLine

# Retrieve the latest new events since the last `get_new_events()` call
events = handle.get_new_events()
for event in events:
  print(event)
  if event.type == FilesystemEventType.Write:
    print(f"wrote to file {event.name}")
```
</CodeGroup>
