I need to change the timestamp of about 5000 files.
Typing touch file1.txt
, touch file2.txt
will take me forever.
Is there a way to do something in the lines of touch -R *
?
I need to change the timestamp of about 5000 files.
Typing touch file1.txt
, touch file2.txt
will take me forever.
Is there a way to do something in the lines of touch -R *
?
You can use find
command to find all your files and execute touch
on every found file using -exec
find . -type f -exec touch {} +
If you want to filter your result only for text files, you can use
find . -type f -name "*.txt" -exec touch {} +
-exec touch {} +
part, and it'll print to your terminal what it would have affected.
– Alex
Feb 01 '15 at 20:11
find
suggests it is more secure to use -execdir
rather than -exec
as -execdir
runs each command from the directory in which the find
result is located. It also says that when invoked from a shell, "[the curly brace pair] should be quoted (for example, '{}') to protect it from interpretation by shells".
– Bob Sammers
Jan 24 '20 at 21:55
-type f
, it will also affect directories:
find . -execdir touch '{}' +
(also incorporated other improvements as mentioned above)
– Christopher Bottoms
Apr 22 '22 at 16:39
g_p's answer makes the timestamp "now" but if for instance you forgot the cp -p parameter and need to replace timestamps with their originals recursively without recopying all the files. Here is what worked for me:
find /Destination -exec bash -c 'touch -r "${0/Destination/Source}" "$0"' {} \;
This assumes a duplicate file/ folder tree of Source: /Source
and Destination: /Destination
find
searches the Destination for all files & dirs (which need timestamps) and -exec ... {}
runs a command for each result.bash -c ' ... '
executes a shell command using bash.$0
holds the find result.touch -r {timestamped_file} {file_to_stamp}
uses a bash replace command ${string/search/replace}
to set timestamp source appropriately.
touch file{1..3}.txt
? – Avinash Raj Feb 01 '15 at 09:57touch **/*
is convenient. – Marc Glisse Feb 01 '15 at 22:36