touch

2024-02-08

What does touch do?

Primarily, touch creates empty files. If a file with the specified name already exists, touch updates its last access and modification timestamps to the current time. This seemingly simple function has surprisingly versatile applications.

Creating New Files

The most basic usage of touch is creating a new, empty file. Let’s say you want to create a file named my_new_file.txt:

touch my_new_file.txt

This command instantly creates my_new_file.txt in your current directory. You can verify its existence using the ls command:

ls -l my_new_file.txt

This will display detailed information about the file, including its size (which will be 0 bytes for a newly created empty file).

Creating Multiple Files

touch can efficiently create multiple files simultaneously. To create file1.txt, file2.txt, and file3.txt:

touch file1.txt file2.txt file3.txt

Updating Timestamps

If a file already exists, touch updates its timestamps without altering its contents. Let’s create a file and then use touch to update its timestamps:

echo "Hello, world!" > my_file.txt
ls -l my_file.txt  #Observe initial timestamps

touch my_file.txt
ls -l my_file.txt  #Observe updated timestamps

Notice the change in the “modified” and “accessed” timestamps after the second touch command.

Specifying Timestamps

touch also allows you to set specific timestamps using the -t option. The format is YYYYMMDDHHMM.SS. For example, to set the timestamp of my_file.txt to January 1st, 2024, at 10:00:00 AM:

touch -t 202401011000 my_file.txt

Note that the seconds (SS) are optional.

-c Option (No Create)

The -c option prevents touch from creating a new file if one doesn’t already exist. This is useful for only updating timestamps:

touch -c non_existent_file.txt  # No error, no file created

touch -c my_file.txt # Timestamps of my_file.txt updated

Using -c with a non-existent file results in no action, and no error message.

-r Option (Reference Timestamp)

The -r option allows you to copy the timestamps from a reference file. To copy the timestamps of source_file.txt to destination_file.txt:

touch source_file.txt # Create source file
touch destination_file.txt # Create destination file
touch -r source_file.txt destination_file.txt

Now destination_file.txt will have the same timestamps as source_file.txt.

Advanced Usage and Scripting

The touch command’s simplicity makes it incredibly useful within shell scripts for automating file management tasks, such as creating temporary files, or managing log files with specific timestamps. Its ability to silently update timestamps without changing content makes it an essential tool for any Linux user.