I need to a copy file and after that I need to change the timestamp attributes as the original file. How can I do it with the terminal or any other way?
3 Answers
You can preserve the timestamp of the original file when copying using cp by adding the -p or --preserve option:
-p same as --preserve=mode,ownership,timestamps--preserve[=ATTR_LIST] preserve the specified attributes (default: mode,ownership,time‐ stamps), if possible additional attributes: context, links, xattr, all
So to preserve only the timestamp
cp --preserve=timestamps oldfile newfile
or to preserve mode and ownership as well
cp --preserve oldfile newfile
or
cp -p oldfile newfile
Additional options are available for recursive copying - a common one is cp -a (cp --archive) which additionally preserves symbolic links.
- 142,475
If you want to preserve the original timestamps, use
$ touch -r <original_file> <new_file>
This copies the timestamps from another file.
See this blog post for more: Fake File Access, Modify and Change TimeStamps
- 14,504
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
findsearches 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.$0holds the find result.touch -r {timestamped_file} {file_to_stamp}uses a bash replace command${string/search/replace}to set timestamp source appropriately.- the Source and Destination directories are quoted to handle dirs with spaces.
- 61