You can use the find command and other options as follows. The -s option to the test builtin check to see if FILE exists and has a size greater than zero. It returns true and false values to indicate that file is empty or has some data. This page shows how to check if a file is empty in Bash shell running on a Linux or Unix-like operating systems.
Check If File Is Empty Or Not Using Shell Script
The syntax is as follows:
touch /tmp/file1 ls -l /tmp/file1 find /tmp -empty -name file1
Sample outputs:
/tmp/file1
Now create another file with some data in it:
echo "data" > /tmp/file2 ls -l /tmp/file2 find /tmp -empty -name file2
You should not see any output from the find command.
Bash Script – Check If File is Empty or Not With the -s Option
However, one can pass the -s option as follows in script or shell prompt:
touch /tmp/f1 echo "data" >/tmp/f2 ls -l /tmp/f{1,2} [ -s /tmp/f1 ] echo $?
Sample outputs:
1
The non zero output indicate that file is empty.
[ -s /tmp/f2 ] echo $?
Sample outputs:
0
Bash Script/Command Check If File is Empty or Not
Shell Script To Check If File Is Empty OR Not
#!/bin/bash _file="$1" [ $# -eq 0 ] && { echo "Usage: $0 filename"; exit 1; } [ ! -f "$_file" ] && { echo "Error: $0 file not found."; exit 2; } if [ -s "$_file" ] then echo "$_file has some data." # do something as file has data else echo "$_file is empty." # do something as file is empty fi
Run it as follows:
chmod +x script.sh
./script.sh /etc/resolv.conf
Sample outputs:
/etc/resolv.conf has some data.
Run it on an empty file:
touch /tmp/test.txt
./script.sh /tmp/test.txt
Sample outputs:
test.txt is empty.
Conclusion
This page showed how to check if file is empty on a Linux or Unix-like operating systems using various commands. See test command for more info.
ð§ Please support my work on Patreon or with a donation.
ð§ Get the latest tutorials on Linux, Open Source & DevOps via:
ð§ Get the latest tutorials on Linux, Open Source & DevOps via:
- RSS feed or Weekly email newsletter
- Share on Twitter ⢠Facebook ⢠6 comments... 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 |
Given shell script is not executing the then block of the if condition………….it always executing else block, either input file is empty or not…………..
Very helpful …
What if you there might be multiple files exist? ex:
file1, file2, file3
if [ -s “$file*” ] or if [-s file*]
do not work
any suggestions?
Thanks
Vivian
@Vivan
You need to edit the script:
1050608895600125e042e88_000005
How do send emails on the sample outputs in linux as a crontab
This was very helpful, I have it in a script to email me when there are failed login attempts on my servers!