What is the Touch Command?

As we progress through our GNU Core Utilities series, we move on to the touch command. The touch command in Linux is used to manipulate the timestamp associated with files. With it you can change the modification time, access time, or even copy another files timestamps. The touch command is also often used just to create an empty file. Below we will show some examples of how to use the touch command.

Create an Empty File with Touch

To create an empty file, you simple run the touch command and specify a filename after it.

$ touch myfile.txt

This creates a empty file named my file. Let's take a look at the file and notice the timestamp which marks the time the file was created.

$ ls -l myfile.txt
-rw-rw-r--. 1 savona savona 0 Feb 1 12:01 myfile.txt

Timestamp formats

There are several formats you can use while manipulating timestamps.

Stamp Format

The STAMP uses a rigid format which can be used the with -t option.

touch -t [[CC]YY]MMDDhhmm[.ss]
  • CC = First two digits of the year
  • YY = Last two digits of the year
  • MM = Month
  • DD = Specifies the Day (If less that 10 use leading zero ie. 05 for May)
  • hh = Hour (If less than 10 use leading zero)
  • mm = Minutes (If less than 10 use leading zero)
  • ss = Seconds (If less than 10 use leading zero)

As an example this is what it would look like to change a file to October 8th 2018, at 07:30 and 30 seconds.

$ touch -t 201810080730.30 myfile.txt

String Format

The STRING format a free format human readable date string. Below are some of the options you can use with the string format.

$ touch -d "Fri, 1 Feb 2019 18:30:00 -0500" myfile.txt
$ touch -d "2019-02-01 18:30" myfile.txt
$ touch -d "last Friday" myfile.txt

Changing a File Timestamp

You can use touch to modify two different timestamps of a file. If you do not specify which you want to modify, the will both be changed.

Modifying the Access Time

The access time or atime of a file is changed whenever a file it opened for reading. If we want to use touch to modify the atime only, we must specify the -a option.

Using the example above, we created a blank file on February 1 at 12:01. We can use the ls command to check the last access time of the file.

$ ls -l --time=atime myfile.txt
-rw-rw-rw-. 1 savona savona 0 Feb 1 12:01 myfile.txt

This shows us that the file has not been read since the file was created. Now let's use the cat command to read the file, and see what happens.

$ cat myfile 
$ ls -l --time=atime myfile.txt
-rw-rw-rw-. 1 savona savona 0 Feb 2 11:38 myfile.txt

As you can see the atime attribute was updated because we access the file with cat.

Now we can use the touch command to modify the atime to be whatever we want. The format for setting a timestamp is Let's change it to January 22 2019 at 07:30 like so.

$ touch -a -t 201901220730.00 myfile.txt

Let's use "ls -l ---time=atime" to check the change.

$ ls -l --time=atime myfile.txt
-rw-rw-rw-. 1 savona savona 0 Jan 22 07:30 myfile.txt

We successfully changed the atime of the file. We could have also used the String format like so:

$ touch -a -d "2019-01-22 07:30:00" myfile.txt

Modifying the Modified Time

The mtime or last modified time can easily be modified using the same syntax. If we want to use touch to modify the mtime only, we must specify the -m option. Here are some examples.

Using the stamp format:

$ touch -m -t 201901220730.00 myfile.txt

Using the string format:

$ touch -m -d "2019-01-22 07:30:00" myfile.txt

Copying Another File's Timestamp

You can copy the timestamp from another file using the -r (reference) option.

$ touch oldfile.txt -r myfile.txt

As you can see, this copied the timestamp from oldfile to myfile:

$ ls -l oldfile.txt 
-rw-rw-r--. 1 savona savona 0 Jan 26 07:30 oldfile.txt
$ ls -l myfile.txt
-rw-rw-rw-. 1 savona savona 0 Jan 26 07:30 myfile.txt