Skip to content

File Operators

Operator Description
-a file True if file exists; it can be empty or have some content but, so long as it exists, this will be true
-b file True if file exists and is a block special file such as a hard drive like /dev/sda or /dev/sda1
-c file True if file exists and is a character special file such as a TTY device like /dev/TTY1
-d file True if file exists and is a directory
-e file True if file exists; this is the same as -a above
-f file True if file exists and is a regular file, as opposed to a directory, a device special file, or a link, among others
-g file True if file exists and is set-group-id, SETGID
-h file True if file exists and is a symbolic link
-k file True if file exists and its "sticky'" bit is set
-p file True if file exists and is a named pipe (FIFO)
-r file True if file exists and is readable, i.e., has its read bit set
-s file True if file exists and has a size greater than zero; a file that exists but that has a size of zero will return false
-t fd True if the file descriptor fd is open and refers to a terminal
-u file True if file exists and its set-user-id (SUID) bit is set
-w file True if file exists and is writable
-x file True if file exists and is executable
-G file True if file exists and is owned by the effective group ID
-L file True if file exists and is a symbolic link
-N file True if file exists and has been modified since it was last read
-O file True if file exists and is owned by the effective user ID
-S file True if file exists and is a socket
file1 -ef file2 True if file1 and file2 refer to the same device and inode numbers
file1 -nt file2 True if file1 is newer (according to modification date) than file2, or if file1 exists and file2 does not
file1 -ot file2 True if file1 is older than file2, or if file2 exists and file1 does not