Bash Cheat Sheet - File operation

Bash Cheat Sheet - File operation

Get filename with file extension


Get filename without file extension


Get extension from filename


Get MIME type of the given file

MIME_TYPE=`file --brief --mime-type "$FILE"`

Get current directory of the script

Get the full directory name of the script no matter where it is being called from. Uses Bash variable BASH_SOURCE. reference source

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

Get the name of the script

Simple way to get the script name


Advanced method to get the script name. The below code will also try to resolve symbolic link.

PROGRAMNAME="$(basename "$(test -L "$0" && readlink "$0" || echo "$0")")"

Get the directory path for a given filepath

The below code will resolve relative path or symlink into absolute directory path for a given filepath.

DIR="$(dirname "$(readlink -f $FILE)")"

Preserve file timestamp from original file

filemodtime=$(stat -c%y "$FILE" | sed 's/[ ]\+/ /g')
touch -m -d "$filemodtime" "$NEWFILE"

Find and update access time

Find all files in folder and update the access time to specified time.

$ find /var/files/ -type f -atime +1 -exec touch -a --date="2016-03-10" {} \;

Changing a File "Access" and "Modification" Time

Change a file's access time (atime) :

$ touch -a --date="2016-03-10" file.txt
$ touch -a --date="2016-03-10 02:00" file.txt
$ touch -a --date="2016-03-10 02:00:22.432346231 +0421" file.txt

Change a file's modification time (mtime) :

$ touch -m --date="2025-03-12" file.txt
$ touch -m --date="2025-03-12 21:04" file.txt
$ touch -m --date="2025-03-12 21:04:22.432346231 +0421" file.txt

Update All time of a file to specific time

The below command copies the current time to a variable. then update the system date to any specified time and then update the timestamp of the file and revert back system time to default.

$ NOW=$(date) && date -s "2030-08-15 21:30:11" && touch file.txt && date -s "$NOW" && unset NOW

Remove Whitespace from File names

This command will find all the files from the directory where the command is run and removes spaces in file names.

$ find $1 -name "* *" -type f -print0 |   while read -d $'\0' f; do mv -fv "$f" "${f// /}"; done


Awesome Dev

Awesome Dev

I am a programming enthusiast. I have a proven track record on translating complex business ideas into working implementations. Software development is not just my career but its my hobby.


You may also like

    Comments powered by Disqus