How do I check if a directory contains files? How do I find out if a directory contains files using bash shell under Linux or Unix like operating systems?
To test if folder is empty or not use the following methods.
Method # 1: Find command
The syntax is:
find /path/to/dir -maxdepth 0 -empty -exec echo {} is empty. \;
You can modify it as follows to work with shell if command:
#!/bin/bash dir=$1 [ $# -eq 0 ] && { echo "Usage: $0 directory"; exit 2; } [ ! -d "$dir" ] && { echo "$dir is not a directory."; exit 2; } if find "$dir" -maxdepth 0 -empty | read; then echo "$dir empty." else echo "$dir not empty." fi
Run the script as follows:
./script /etc
Sample outputs:
/etc not empty.
Create a directory / folder called /tmp/foo using mkdir command:
$ mkdir /tmp/foo
Run the script as follows:
./script /tmp/foo
Sample outputs:
/tmp/foo empty.
Method #2: Other commands
See our previous tutorial and comments for more info:
🐧 Get the latest tutorials on Linux, Open Source & DevOps via RSS feed or Weekly email newsletter.
🐧 5 comments so far... add one ↓
🐧 5 comments so far... add one ↓
Category | List of Unix and Linux commands |
---|---|
File Management | cat |
Firewall | Alpine Awall • CentOS 8 • OpenSUSE • RHEL 8 • Ubuntu 16.04 • Ubuntu 18.04 • Ubuntu 20.04 |
Network Utilities | dig • host • ip • nmap |
OpenVPN | CentOS 7 • CentOS 8 • Debian 10 • Debian 8/9 • Ubuntu 18.04 • Ubuntu 20.04 |
Package Manager | apk • apt |
Processes Management | bg • chroot • cron • disown • fg • jobs • killall • kill • pidof • pstree • pwdx • time |
Searching | grep • whereis • which |
User Information | groups • id • lastcomm • last • lid/libuser-lid • logname • members • users • whoami • who • w |
WireGuard VPN | Alpine • CentOS 8 • Debian 10 • Firewall • Ubuntu 20.04 |
These’re hard ways! You can do it:
if [ `ls -A “$dir” | wc -l` -eq 0 ]; then echo “Empty!”; fi
In the find command you need to include the parameter -type d so that it searches only directories and not the files
if ! ls /path/to/dir/* 2> /dev/null; then echo Empty; fi
if ! ls /path/to/file/* 2> /dev/null; then
echo Empty;
fi