How to Check if a Directory Exists and Is Not Empty (With Code Examples)

Whether you’re scripting an automation task, working with file systems in an application, or validating user input paths, checking if a directory exists and is not empty is a fundamental operation in programming. Skipping this check can lead to runtime errors, unexpected behavior, or even data loss.

In this blog, we’ll walk through how to perform this check using several popular programming languages: Python, Bash, Node.js, and PowerShell. Each example ensures two conditions:

  1. The directory exists.
  2. The directory is not empty.

1. Python

Python’s os and os.path modules make file system operations simple and intuitive.

import os

def is_dir_exists_and_not_empty(path):
    return os.path.isdir(path) and bool(os.listdir(path))

# Example usage
directory = '/path/to/your/directory'
if is_dir_exists_and_not_empty(directory):
    print(f" Directory '{directory}' exists and is not empty.")
else:
    print(f" Directory '{directory}' either doesn't exist or is empty.")

Explanation:

  • os.path.isdir(path) checks if the given path is a directory.
  • os.listdir(path) returns the list of entries in the directory; bool() ensures we get a True only if the list is non-empty.

2. Bash (Linux/Mac Terminal)

In Bash, you can combine -d to check directory existence and ls or find to check contents.

directory="/path/to/your/directory"

if [ -d "$directory" ] && [ "$(ls -A "$directory")" ]; then
    echo " Directory '$directory' exists and is not empty."
else
    echo " Directory '$directory' either doesn't exist or is empty."
fi

Explanation:

  • -d "$directory": Returns true if the directory exists.
  • ls -A "$directory": Lists all files including hidden ones (. and .. are excluded).

3. Node.js (JavaScript)

Node.js has fs (file system) and path modules that provide asynchronous and synchronous API’s for file handling.

const fs = require('fs');
const path = require('path');

function isDirExistsAndNotEmpty(directoryPath) {
    try {
        return fs.statSync(directoryPath).isDirectory() &&
               fs.readdirSync(directoryPath).length > 0;
    } catch (err) {
        return false;
    }
}

// Example usage
const directory = '/path/to/your/directory';
if (isDirExistsAndNotEmpty(directory)) {
    console.log(` Directory '${directory}' exists and is not empty.`);
} else {
    console.log(` Directory '${directory}' either doesn't exist or is empty.`);
}

Explanation:

  • fs.statSync() checks if the path is a directory.
  • fs.readdirSync() reads contents synchronously; length > 0 ensures it’s not empty.
  • try...catch handles the case when the path doesn’t exist.

4. PowerShell (Windows)

In PowerShell, you can use built-in cmdlets to inspect directories:

$directory = "C:\Path\To\Your\Directory"

if ((Test-Path $directory) -and ((Get-ChildItem $directory | Measure-Object).Count -gt 0)) {
    Write-Host " Directory '$directory' exists and is not empty."
} else {
    Write-Host " Directory '$directory' either doesn't exist or is empty."
}

Explanation:

  • Test-Path $directory: Checks for existence.
  • Get-ChildItem: Lists contents.
  • Measure-Object: Counts items in the list.

Additional Notes

1. Hidden Files

Some checks (like ls vs ls -A) may ignore hidden files depending on your command or language-specific behavior. Be sure to choose the method that suits your needs.

2. Symlinks

If symbolic links are involved, ensure you’re checking the target directory, not just the link.

3. Permissions

Lack of permission to read the directory can cause false negatives. Make sure your script or process has proper access.


Summary Table

Language Check Directory Exists Check Not Empty
Python os.path.isdir() bool(os.listdir())
Bash [ -d "$dir" ] ls -A "$dir"
Node.js fs.statSync().isDirectory() fs.readdirSync().length > 0
PowerShell Test-Path `Get-ChildItem

Conclusion

No matter the language or environment, checking if a directory exists and is not empty is a common task with slight syntax differences across platforms. Pick the method that suits your development stack and always consider edge cases like symlinks, hidden files, or permissions.

Let us know in the comments which language you’re using and if you’d like examples for another language like Go, Rust, or PHP!