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.
-
3Surprisingly, this did not work on macOS when copying from a FAT32 partition to an exFAT partition.– bonhMay 7, 2020 at 1:04
-
6I think this should be the accepted answer. It solves the problem with one command which I think is what the OP was really after. It is also well explained. Aug 17, 2020 at 23:33
-
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
-
-
4
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.- the Source and Destination directories are quoted to handle dirs with spaces.
-p
or--preserve=
option e.g.cp -p oldfile newfile
cp --preserve=timestamps
an answer