LinuxShell用cp
和date
命令生成备份文件
用于生成备份文件的例子
fp="/etc/samba/smb.conf" ; cp -a ${fp} ${fp}.$(date +%0y%0m%0d%0H%0M%0S).bak
带纳秒ns
fp=/etc/samba/smb.conf ; cp -a $fp $fp.$(date +%0y%0m%0d%0H%0M%0Sns%0N).bak
fp=/etc/samba/smb.conf ; cp -a $fp $fp.$(date +%0y%0m%0d%0H%0M%0S--%0N).bkup
在Linux中,结合使用cp
(复制命令)和date
(日期和时间命令)可以方便地生成带有当前日期或时间戳的备份文件。这样做有助于管理文件版本,确保每个备份都可以根据时间戳进行识别。
下面是一个基本的示例,展示了如何使用cp
和date
命令来创建一个带有当前日期时间戳的备份文件:
cp original_file.txt backup_file_$(date +%Y%m%d_%H%M%S).txt
这个命令做了以下几件事:
cp original_file.txt ...
:指定了要复制的源文件original_file.txt
。backup_file_$(date +%Y%m%d_%H%M%S).txt
:指定了目标文件的名称。这里,$(date +%Y%m%d_%H%M%S)
是一个命令替换,它会被date
命令的输出替换,该命令按照年月日_时分秒
的格式输出当前日期和时间。因此,如果当前时间是2023年4月1日14时30分45秒,那么目标文件名将是backup_file_20230401_143045.txt
。
其他有用的date
格式
%Y-%m-%d
:生成类似2023-04-01
的日期格式。%H:%M:%S
:生成类似14:30:45
的时间格式(24小时制)。%F
:等价于%Y-%m-%d
,即2023-04-01
。%T
:等价于%H:%M:%S
,即14:30:45
。
示例:使用%Y-%m-%d
格式
cp original_file.txt backup_file_$(date +%Y-%m-%d).txt
如果今天是2023年4月1日,这将创建名为backup_file_2023-04-01.txt
的备份文件。
注意
- 确保你有足够的权限来复制文件,并写入目标位置。
- 如果目标文件已存在,它将被新创建的备份文件覆盖。如果你不想覆盖现有文件,可以使用
cp
命令的-n
(或--no-clobber
)选项来防止覆盖。然而,这可能会导致命令在文件已存在时静默失败。另一个选项是使用-i
(或--interactive
)选项,在覆盖文件之前询问用户。 - 对于更复杂的备份需求,如保留多个版本或进行增量备份,可能需要考虑使用更专业的备份工具或脚本来实现。
linux的shell的date命令的加号"+"的作用
1是输出 , 2是填充方式,以0填充补位
-
第一个
+
表示格式化输出字符串, 后接表达式 -
加号后面的加号,在格式化表达式中的加号
+
, 表示以0填充补位, 比如1月会填充为01月, 也可以是0
, 也可以没有,因为默认效果如同0
例如
date "+%y%m%d%H%M%S"
date +"%y%m%d%H%M%S"
date +%+y%m%d%H%M%S
date +%0y%m%d%H%M%S
date +%+y%+m%+d%H%M%S
date +%0y%0m%0d%H%M%S
date +%+y%+m%+d%+H%M%S
date +%0y%0m%0d%0H%M%S
date +%+y%+m%+d%+H%+M%S
date +%0y%0m%0d%0H%0M%S
date +%+y%+m%+d%+H%+M%+S
date +%0y%0m%0d%0H%0M%0S
上面的👆这些是等效果的
左边第一个加号"+
"表示
测试执行z@n100-1:~$ date "+%y%m%d%H%M%S" date +"%y%m%d%H%M%S" date +%+y%m%d%H%M%S date +%0y%m%d%H%M%S date +%+y%+m%+d%H%M%S date +%0y%0m%0d%H%M%S date +%+y%+m%+d%+H%M%S date +%0y%0m%0d%0H%M%S date +%+y%+m%+d%+H%+M%S date +%0y%0m%0d%0H%0M%S date +%+y%+m%+d%+H%+M%+S date +%0y%0m%0d%0H%0M%0S 240721060155 240721060155 240721060155 240721060155 240721060155 240721060155 240721060155 240721060155 240721060155 240721060155 240721060155 240721060155
-
+
在日期运算中标示正号,可以省略
例如: 一秒后的写法date --date "1second" date --date "+1second" date --date "1 second" date --date "+1 second"
格式化中的占位符
%%
字面上的百分号 %%a
当前区域设置的星期几的缩写(例如:日)%A
当前区域设置的星期几的全称(例如:星期日)%b
当前区域设置的月份缩写(例如:1月)%B
当前区域设置的月份全称(例如:一月)%c
当前区域设置的日期和时间(例如:2005年03月03日 星期四 23时05分25秒)%C
世纪(指年份的最高两位);类似 %Y,但省略最后两位数(例如:20)%d
日(例如:01)%D
日期;等于 %m/%d/%y%e
日,以空格填充;等于 %_d%F
完整的日期;等于 %+4Y-%m-%d%g
ISO 周数年的最后两位(参见 %G)%G
ISO 周数年(参见 %V);一般只和 %V 一起使用%h
等于 %b%H
小时 (00…23)%I
小时 (01…12)%j
一年中的第几日 (001…366)%k
小时,以空格填充 ( 0…23);等于 %_H%l
小时,以空格填充 ( 1…12);等于 %_I%m
月 (01…12)%M
分钟 (00…59)%n
换行%N
纳秒 (000000000…999999999)%p
当前区域设置中 AM 或 PM 的等价说法(“上午” 或 “下午”);未知则为空%P
类似 %p,但使用小写%q
季度 (1…4)%r
当前区域设置中 12 小时制钟表时间(例如:下午 11时11分04秒)%R
24 小时制的小时和分钟;等于 %H:%M%s
自 Epoch (1970-01-01 00:00 UTC) 以来的秒数%S
秒 (00…60)%t
制表符%T
时间;等于 %H:%M:%S%u
星期几 (1…7);1 代表星期一%U
一年中的第几周,以周日为每周第一天 (00…53)%V
ISO 周数,以周一为每周第一天 (01…53)%w
星期几 (0…6);0 代表星期日%W
一年中的第几周,以周一为每周第一天 (00…53)%x
当前区域设置的日期表示法(例如:1999年12月31日)%X
当前区域设置的时间表示法(例如:23时13分48秒)%y
年的最后两位 (00…99)%Y
年%z
+hhmm 数字时区(例如:-0400)%:z
+hh:mm 数字时区(例如:-04:00)%::z
+hh:mm:ss 数字时区(例如:-04:00:00)%:::z
数字时区,精度上有必要时加 “:”(例如:-04、+05:30)%Z
字母时区缩写(例如:EDT)
上面这些百分号%
开头的占位符, 百分号%
后可以插入一些字符标志选项, 默认不插入等效插入0, 如 %M
等效%0M
, %S
等效%0S
以下可选的标志可以跟在 “%” 后:
-
(连字符)不填充该字段_
(下划线)以空格填充0
(数字 0)以 0 填充+
以 0 填充,并且在超过四位数的未来年份之前添加 “+” 符号^
如果可能,使用大写字母#
如果可能,使用相反的大小写
一些+
加号格式化输出例子
标准格式
date "+%Y-%m-%d %H:%M:%S"
z@n100-1:~$ date "+%Y-%m-%d %H:%M:%S"
2024-07-21 05:54:17
date "+%Y-%m-%dT%H:%M:%S"
z@n100-1:~$ date "+%Y-%m-%dT%H:%M:%S"
2024-07-21T05:56:33
中文
date +"%Y年 %m月 %d日 星期%a %H时%M分"
[z@3050 ~]$ date +"%Y年 %m月 %d日 星期%a %H时%M分"
2024年 07月 21日 星期日 06时09分
0补位:[无(默认)|0|+], 不补位用连字符(横杆,减号)-
# 0补位
date +"%y%m%d%H%M%S"
date +"%+y%+m%+d%+H%+M%+S"
date +"%0y%0m%0d%0H%0M%0S"
# 不补位
date +"%-y%-m%-d%-H%-M%-S"
结果:
240721062435
240721062435
240721062435
2472162435
# 0补位
date +"%Y年 %m月 %d日 星期%a %H时%M分"
date +"%0Y年 %0m月 %0d日 星期%0a %H时%0M分"
# 不补位
date +"%-Y年 %-m月 %-d日 星期%-a %-H时%-M分"
结果:
2024年 07月 21日 星期日 06时25分
2024年 07月 21日 星期日 06时25分
2024年 7月 21日 星期日 6时25分
选项 -d
(--date
) 可用于运算, 或格式转换
运算
增加减少天数, 多少天前, 多少天后
30天前
# 30天前
date -d "30 day ago"
date -d "30day ago" #数字和day可以没有空格, day和ago要有空格
date -d "-30 day"
date -d "-30day"
# 30天前, 并指定格式输出
date -d "30 day ago" +"%0Y年 %0m月 %0d日 星期%0a %H时%0M分"
3天后
# 3天后
date -d "3 day"
date -d "+3 day"
date -d "3day"
date -d "+3day"
# 30天后, 并指定格式输出
date -d "3 day" +"%0Y年 %0m月 %0d日 周%0a %H时%0M分"
年运算
三年前
date --date "3 year ago"
date --date "3year ago"
date --date "+3year ago"
date --date "+3 year ago"
date --date "-3 year"
date --date "-3year"
三年后
date -d "3 year"
date -d "+3 year"
date -d "3year"
date -d "+3year"
date -d "-3 year ago" ### 负负得正
date -d "-3year ago" ### 负负得正
月运算
三月前
date --date "3 month ago"
date --date "3month ago"
date --date "+3month ago"
date --date "+3 month ago"
date --date "-3 month"
date --date "-3month"
三月后
date -d "3 month"
date -d "+3 month"
date -d "3month"
date -d "+3month"
date -d "-3 month ago" ### 负负得正
date -d "-3month ago" ### 负负得正
日运算
三日前
date --date "3 day ago"
date --date "3day ago"
date --date "+3day ago"
date --date "+3 day ago"
date --date "-3 day"
date --date "-3day"
三日后
date -d "3 day"
date -d "+3 day"
date -d "3day"
date -d "+3day"
date -d "-3 day ago" ### 负负得正
date -d "-3day ago" ### 负负得正
时运算
三时前
date --date "3 hour ago"
date --date "3hour ago"
date --date "+3hour ago"
date --date "+3 hour ago"
date --date "-3 hour"
date --date "-3hour"
三时后
date -d "3 hour"
date -d "+3 hour"
date -d "3hour"
date -d "+3hour"
date -d "-3 hour ago" ### 负负得正
date -d "-3hour ago" ### 负负得正
分运算
三分前
date --date "3 minute ago"
date --date "3minute ago"
date --date "+3minute ago"
date --date "+3 minute ago"
date --date "-3 minute"
date --date "-3minute"
三分后
date -d "3 minute"
date -d "+3 minute"
date -d "3minute"
date -d "+3minute"
date -d "-3 minute ago" ### 负负得正
date -d "-3minute ago" ### 负负得正
秒运算
三秒前
date --date "3 second ago"
date --date "3second ago"
date --date "+3second ago"
date --date "+3 second ago"
date --date "-3 second"
date --date "-3second"
三秒后
date -d "3 second"
date -d "+3 second"
date -d "3second"
date -d "+3second"
date -d "-3 second ago" ### 负负得正
date -d "-3second ago" ### 负负得正
时间加减操作,并指定格式输出
date # 当前, 按默认格式输出
date -d "+1 day" # 一天后, 按默认格式输出
date +%Y%m%d # 当前, 指定输出格式
date -d "-3 year" +%Y%m%d # 三年前 , 并指定输出格式
date -d "+3 year" +%Y%m%d # 三年后 , 并指定输出格式
date -d "-1 month" +%Y%m%d # 上月 , 并指定输出格式
date -d "+1 month" +%Y%m%d # 下月 , 并指定输出格式
date -d "-1 day" +%Y%m%d # 昨天 , 并指定输出格式
date -d "+1 day" +%Y%m%d # 明天 , 并指定输出格式
date -d "-1 week" # 上周
date -d "+1 week" # 下周
date -d "-1 hour" # 一小时前
date -d "+1 hour" # 一小时后
date -d "-15 minute" # 上一刻
date -d "+15 minute" # 下一刻
date -d "-1 second" # 上一秒
date -d "+1 second" # 下一秒
日期格式转换
用-d
按标准格式指定一个时间, 然后用加号+
指定输出格式
注意:-d
与-s
相比, -d
是创造一个时间,不会改变系统时间, -s
是设置系统时间
date -d "2024-07-21 07:55:55" +"%0Y年 %0m月 %0d日 周%0a %H时%0M分"
Fedora40 的 date --help
root@fedora:~# date --help
用法:date [选项]... [+格式]
或:date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
按照给定的 <格式> 显示日期和时间。
使用了 -s 选项或 [MMDDhhmm[[CC]YY][.ss]] 参数时,设置日期和时间。
长选项的必选参数对于短选项也是必选的。
-d, --date=字符串 显示指定 <字符串> 所描述的时间,而不是 "now"
--debug 对日期的解析过程进行注解,
对不规范的用法进行警告,并输出到标准错误
-f, --file=日期文件 类似 --date;对 <日期文件> 的每一行执行一次
-I[格式], --iso-8601[=格式] 以 ISO 8601 格式输出日期/时间。
<格式>="date" 时只输出日期(默认行为),
当其为 "hours"、"minutes"、"seconds" 或 "ns"
时则按照所指示的精确度显示日期和时间。
示例:2006-08-14T02:34:56-06:00
--resolution 输出时间戳的可用精度
例如:0.000000001
-R, --rfc-email 以 RFC 5322 格式输出日期和时间。
例如:Mon, 14 Aug 2006 02:34:56 -0600
--rfc-3339=格式 以 RFC 3339 格式输出日期/时间。
<格式>="date"、"seconds" 或 "ns",
按照所指示的精确度显示日期和时间。
例如:2006-08-14 02:34:56-06:00
-r, --reference=文件 显示 <文件> 的最后修改时间
-s, --set=字符串 将时间设置为 <字符串> 所描述的时间
-u, --utc, --universal 按照协调世界时 (UTC) 显示或设置时间
--help 显示此帮助信息并退出
--version 显示版本信息并退出
所有用于指定要显示的时间的选项都是互斥的。
这些选项包括:--date、--file、--reference、--resolution。
<格式> 控制输出格式。支持解释的序列有:
%% 字面上的百分号 %
%a 当前区域设置的星期几的缩写(例如:日)
%A 当前区域设置的星期几的全称(例如:星期日)
%b 当前区域设置的月份缩写(例如:1月)
%B 当前区域设置的月份全称(例如:一月)
%c 当前区域设置的日期和时间(例如:2005年03月03日 星期四 23时05分25秒)
%C 世纪(指年份的最高两位);类似 %Y,但省略最后两位数(例如:20)
%d 日(例如:01)
%D 日期;等于 %m/%d/%y
%e 日,以空格填充;等于 %_d
%F 完整的日期;等于 %+4Y-%m-%d
%g ISO 周数年的最后两位(参见 %G)
%G ISO 周数年(参见 %V);一般只和 %V 一起使用
%h 等于 %b
%H 小时 (00..23)
%I 小时 (01..12)
%j 一年中的第几日 (001..366)
%k 小时,以空格填充 ( 0..23);等于 %_H
%l 小时,以空格填充 ( 1..12);等于 %_I
%m 月 (01..12)
%M 分钟 (00..59)
%n 换行
%N 纳秒 (000000000..999999999)
%p 当前区域设置中 AM 或 PM 的等价说法("上午" 或 "下午");未知则为空
%P 类似 %p,但使用小写
%q 季度 (1..4)
%r 当前区域设置中 12 小时制钟表时间(例如:下午 11时11分04秒)
%R 24 小时制的小时和分钟;等于 %H:%M
%s 自 Epoch (1970-01-01 00:00 UTC) 以来的秒数
%S 秒 (00..60)
%t 制表符
%T 时间;等于 %H:%M:%S
%u 星期几 (1..7);1 代表星期一
%U 一年中的第几周,以周日为每周第一天 (00..53)
%V ISO 周数,以周一为每周第一天 (01..53)
%w 星期几 (0..6);0 代表星期日
%W 一年中的第几周,以周一为每周第一天 (00..53)
%x 当前区域设置的日期表示法(例如:1999年12月31日)
%X 当前区域设置的时间表示法(例如:23时13分48秒)
%y 年的最后两位 (00..99)
%Y 年
%z +hhmm 数字时区(例如:-0400)
%:z +hh:mm 数字时区(例如:-04:00)
%::z +hh:mm:ss 数字时区(例如:-04:00:00)
%:::z 数字时区,精度上有必要时加 ":"(例如:-04、+05:30)
%Z 字母时区缩写(例如:EDT)
默认情况下,date 输出的数字字段以 0 填充。
以下可选的标志可以跟在 "%" 后:
- (连字符)不填充该字段
_ (下划线)以空格填充
0 (数字 0)以 0 填充
+ 以 0 填充,并且在超过四位数的未来年份之前添加 "+" 符号
^ 如果可能,使用大写字母
# 如果可能,使用相反的大小写
在任何标志之后可以有一个可选的字段宽度,它是一个十进制数字;
然后是一个可选的修饰符,它可以是
E,表示如果可用,使用区域设置的另一种表示法,或者
O,表示如果可用,使用区域设置的另一套数字符号。
示例:
将 Epoch (1970-01-01 UTC) 以来的秒数转换为日期
$ date --date='@2147483647'
显示美国西海岸的当前时间(请使用 tzselect(1) 来查询 TZ 的具体数值)
$ TZ='America/Los_Angeles' date
显示美国西海岸当地时间为下一个星期五早上九点时,此计算机的本地时间
$ date --date='TZ="America/Los_Angeles" 09:00 next Fri'
GNU coreutils 在线帮助:<https://www.gnu.org/software/coreutils/>
请向 <http://translationproject.org/team/zh_CN.html> 报告任何翻译错误
完整文档 <https://www.gnu.org/software/coreutils/date>
或者在本地使用:info '(coreutils) date invocation'
Ubuntu24.04的 date --help
root@n100-1:/etc/samba# date --help
用法:date [选项]... [+格式]
或:date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
按照给定的 <格式> 显示日期和时间。
使用了 -s 选项或 [MMDDhhmm[[CC]YY][.ss]] 参数时,设置日期和时间。
长选项的必选参数对于短选项也是必选的。
-d, --date=字符串 显示指定 <字符串> 所描述的时间,而不是 "now"
--debug 对日期的解析过程进行注解,
对不规范的用法进行警告,并输出到标准错误
-f, --file=日期文件 类似 --date;对 <日期文件> 的每一行执行一次
-I[格式], --iso-8601[=格式] 以 ISO 8601 格式输出日期/时间。
<格式>="date" 时只输出日期(默认行为),
当其为 "hours"、"minutes"、"seconds" 或 "ns"
时则按照所指示的精确度显示日期和时间。
示例:2006-08-14T02:34:56-06:00
--resolution 输出时间戳的可用精度
例如:0.000000001
-R, --rfc-email 以 RFC 5322 格式输出日期和时间。
例如:Mon, 14 Aug 2006 02:34:56 -0600
--rfc-3339=格式 以 RFC 3339 格式输出日期/时间。
<格式>="date"、"seconds" 或 "ns",
按照所指示的精确度显示日期和时间。
例如:2006-08-14 02:34:56-06:00
-r, --reference=文件 显示 <文件> 的最后修改时间
-s, --set=字符串 将时间设置为 <字符串> 所描述的时间
-u, --utc, --universal 按照协调世界时 (UTC) 显示或设置时间
--help 显示此帮助信息并退出
--version 显示版本信息并退出
所有用于指定要显示的时间的选项都是互斥的。
这些选项包括:--date、--file、--reference、--resolution。
<格式> 控制输出格式。支持解释的序列有:
%% 字面上的百分号 %
%a 当前区域设置的星期几的缩写(例如:日)
%A 当前区域设置的星期几的全称(例如:星期日)
%b 当前区域设置的月份缩写(例如:1月)
%B 当前区域设置的月份全称(例如:一月)
%c 当前区域设置的日期和时间(例如:2005年03月03日 星期四 23时05分25秒)
%C 世纪(指年份的最高两位);类似 %Y,但省略最后两位数(例如:20)
%d 日(例如:01)
%D 日期;等于 %m/%d/%y
%e 日,以空格填充;等于 %_d
%F 完整的日期;等于 %+4Y-%m-%d
%g ISO 周数年的最后两位(参见 %G)
%G ISO 周数年(参见 %V);一般只和 %V 一起使用
%h 等于 %b
%H 小时 (00..23)
%I 小时 (01..12)
%j 一年中的第几日 (001..366)
%k 小时,以空格填充 ( 0..23);等于 %_H
%l 小时,以空格填充 ( 1..12);等于 %_I
%m 月 (01..12)
%M 分钟 (00..59)
%n 换行
%N 纳秒 (000000000..999999999)
%p 当前区域设置中 AM 或 PM 的等价说法("上午" 或 "下午");未知则为空
%P 类似 %p,但使用小写
%q 季度 (1..4)
%r 当前区域设置中 12 小时制钟表时间(例如:下午 11时11分04秒)
%R 24 小时制的小时和分钟;等于 %H:%M
%s 自 Epoch (1970-01-01 00:00 UTC) 以来的秒数
%S 秒 (00..60)
%t 制表符
%T 时间;等于 %H:%M:%S
%u 星期几 (1..7);1 代表星期一
%U 一年中的第几周,以周日为每周第一天 (00..53)
%V ISO 周数,以周一为每周第一天 (01..53)
%w 星期几 (0..6);0 代表星期日
%W 一年中的第几周,以周一为每周第一天 (00..53)
%x 当前区域设置的日期表示法(例如:1999年12月31日)
%X 当前区域设置的时间表示法(例如:23时13分48秒)
%y 年的最后两位 (00..99)
%Y 年
%z +hhmm 数字时区(例如:-0400)
%:z +hh:mm 数字时区(例如:-04:00)
%::z +hh:mm:ss 数字时区(例如:-04:00:00)
%:::z 数字时区,精度上有必要时加 ":"(例如:-04、+05:30)
%Z 字母时区缩写(例如:EDT)
默认情况下,date 输出的数字字段以 0 填充。
以下可选的标志可以跟在 "%" 后:
- (连字符)不填充该字段
_ (下划线)以空格填充
0 (数字 0)以 0 填充
+ 以 0 填充,并且在超过四位数的未来年份之前添加 "+" 符号
^ 如果可能,使用大写字母
# 如果可能,使用相反的大小写
在任何标志之后可以有一个可选的字段宽度,它是一个十进制数字;
然后是一个可选的修饰符,它可以是
E,表示如果可用,使用区域设置的另一种表示法,或者
O,表示如果可用,使用区域设置的另一套数字符号。
示例:
将 Epoch (1970-01-01 UTC) 以来的秒数转换为日期
$ date --date='@2147483647'
显示美国西海岸的当前时间(请使用 tzselect(1) 来查询 TZ 的具体数值)
$ TZ='America/Los_Angeles' date
显示美国西海岸当地时间为下一个星期五早上九点时,此计算机的本地时间
$ date --date='TZ="America/Los_Angeles" 09:00 next Fri'
GNU coreutils 在线帮助:<https://www.gnu.org/software/coreutils/>
请向 <http://translationproject.org/team/zh_CN.html> 报告任何翻译错误
完整文档 <https://www.gnu.org/software/coreutils/date>
或者在本地使用:info '(coreutils) date invocation'
CentOS6.9的 date --help
[z@1235vm-c69w 桌面]$ date --help
用法:date [选项]... [+格式]
或:date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
以给定的格式显示当前时间,或是设置系统日期。
-d,--date=字符串 显示指定字符串所描述的时间,而非当前时间
-f,--file=日期文件 类似--date,从日期文件中按行读入时间描述
-r, --reference=文件 显示文件指定文件的最后修改时间
-R, --rfc-2822 以RFC 2822格式输出日期和时间
例如:2006年8月7日,星期一 12:34:56 -0600
--rfc-3339=TIMESPEC 以RFC 3339 格式输出日期和时间。
TIMESPEC=`date',`seconds',或 `ns'
表示日期和时间的显示精度。
日期和时间单元由单个的空格分开:
2006-08-07 12:34:56-06:00
-s, --set=字符串 设置指定字符串来分开时间
-u, --utc, --universal 输出或者设置协调的通用时间
--help 显示此帮助信息并退出
--version 显示版本信息并退出
给定的格式FORMAT 控制着输出,解释序列如下:
%% 一个文字的 %
%a 当前locale 的星期名缩写(例如: 日,代表星期日)
%A 当前locale 的星期名全称 (如:星期日)
%b 当前locale 的月名缩写 (如:一,代表一月)
%B 当前locale 的月名全称 (如:一月)
%c 当前locale 的日期和时间 (如:2005年3月3日 星期四 23:05:25)
%C 世纪;比如 %Y,通常为省略当前年份的后两位数字(例如:20)
%d 按月计的日期(例如:01)
%D 按月计的日期;等于%m/%d/%y
%e 按月计的日期,添加空格,等于%_d
%F 完整日期格式,等价于 %Y-%m-%d
%g ISO-8601 格式年份的最后两位 (参见%G)
%G ISO-8601 格式年份 (参见%V),一般只和 %V 结合使用
%h 等于%b
%H 小时(00-23)
%I 小时(00-12)
%j 按年计的日期(001-366)
%k 时(0-23)
%l 时(1-12)
%m 月份(01-12)
%M 分(00-59)
%n 换行
%N 纳秒(000000000-999999999)
%p 当前locale 下的"上午"或者"下午",未知时输出为空
%P 与%p 类似,但是输出小写字母
%r 当前locale 下的 12 小时时钟时间 (如:11:11:04 下午)
%R 24 小时时间的时和分,等价于 %H:%M
%s 自UTC 时间 1970-01-01 00:00:00 以来所经过的秒数
%S 秒(00-60)
%t 输出制表符 Tab
%T 时间,等于%H:%M:%S
%u 星期,1 代表星期一
%U 一年中的第几周,以周日为每星期第一天(00-53)
%V ISO-8601 格式规范下的一年中第几周,以周一为每星期第一天(01-53)
%w 一星期中的第几日(0-6),0 代表周一
%W 一年中的第几周,以周一为每星期第一天(00-53)
%x 当前locale 下的日期描述 (如:12/31/99)
%X 当前locale 下的时间描述 (如:23:13:48)
%y 年份最后两位数位 (00-99)
%Y 年份
%z +hhmm 数字时区(例如,-0400)
%:z +hh:mm 数字时区(例如,-04:00)
%::z +hh:mm:ss 数字时区(例如,-04:00:00)
%:::z 数字时区带有必要的精度 (例如,-04,+05:30)
%Z 按字母表排序的时区缩写 (例如,EDT)
默认情况下,日期的数字区域以0 填充。
以下可选标记可以跟在"%"后:
- (连字符)不填充该域
_ (下划线)以空格填充
0 (数字0)以0 填充
^ 如果可能,使用大写字母
# 如果可能,使用相反的大小写
在任何标记之后还允许一个可选的域宽度指定,它是一个十进制数字。
作为一个可选的修饰声明,它可以是E,在可能的情况下使用本地环境关联的
表示方式;或者是O,在可能的情况下使用本地环境关联的数字符号。
请向bug-coreutils@gnu.org 报告date 的错误
GNU coreutils 项目主页:<http://www.gnu.org/software/coreutils/>
GNU 软件一般性帮助:<http://www.gnu.org/gethelp/>
请向<http://translationproject.org/team/zh_CN.html> 报告date 的翻译错误
要获取完整文档,请运行:info coreutils 'date invocation'
Linux的shell的cp
命令
在Linux中,cp
(copy)命令是一个非常基本的命令,用于复制文件或目录。它提供了多种选项来满足不同的复制需求。下面是一些cp
命令的基本用法和选项。
基本用法
-
复制文件到另一个位置:
cp source_file destination_file
这会将
source_file
复制到destination_file
。如果destination_file
已经存在,它会被覆盖,除非使用了特定的选项来防止这种情况。 -
复制目录(需要
-r
或-R
选项来递归复制):cp -r source_directory destination_directory
这会递归地复制
source_directory
到destination_directory
。如果destination_directory
不存在,它会被创建。
常用选项
-
-i
(或--interactive
):在覆盖文件之前提示用户。cp -i source_file destination_file
-
-r
,-R
(或--recursive
):递归复制目录。cp -r source_directory/ destination_directory/
-
-v
(或--verbose
):显示详细的处理信息。cp -v source_file destination_file
-
-p
(或--preserve
):保留原文件的属性,如修改时间、访问时间、文件模式、文件所有权和组所有权。cp -p source_file destination_file
-
-a
(或--archive
):等同于-dR --preserve=all
,常用于备份,因为它会尽可能保留原文件的所有属性。cp -a source_directory/ destination_directory/
-
-u
(或--update
):仅当源文件比目标文件新或目标文件不存在时,才复制文件。cp -u source_file destination_file
-
-l
(或--link
):对源文件创建硬链接,而非复制文件。注意,这不适用于目录,仅对文件有效。cp -l source_file link_to_source_file
注意事项
- 使用
cp
命令时,特别是当使用递归复制选项(-r
或-R
)时,请确保目标路径不会导致无限循环(例如,不要尝试将目录复制到其子目录中)。 - 如果目标文件或目录已存在,并且没有使用
-i
选项,则它会被覆盖,而不会发出任何警告。 - 对于重要的文件或目录,建议先进行备份,然后再执行复制操作,以防万一复制过程中出现错误导致数据丢失。
cp
命令是Linux和Unix系统中不可或缺的工具之一,掌握其基本用法和常用选项对于日常的系统管理和文件操作至关重要。
常用 cp -a
在Linux的shell中,cp
命令用于复制文件或目录,而-a
(或--archive
)选项是cp
命令的一个非常有用的选项,它结合了多个其他选项的功能,以尽可能完整地复制文件或目录。
-a
选项通常被称为“归档”选项,因为它旨在保留尽可能多的原文件或目录的属性。具体来说,-a
选项等同于以下选项的组合:
-dR
:递归复制目录,并保持链接不变(-d
表示复制链接本身,而不是链接指向的文件;-R
或-r
表示递归复制)。--preserve=all
:保留所有文件属性,包括所有权、时间戳、访问权限、ACLs(访问控制列表,如果支持的话)、扩展属性、链接、文件数据和目录的所有内容。
因此,当你使用cp -a
命令时,你实际上是在说:“我想要复制这个文件或目录,并且我想保留所有与之相关的属性,就像它是被归档或备份的那样。”
这里有一些使用cp -a
命令的例子:
-
复制目录及其所有内容(包括子目录和文件),保留所有属性:
cp -a source_directory/ destination_directory/
注意:如果
destination_directory/
不存在,cp
会创建它。如果它已存在,并且你想在destination_directory/
内部创建一个名为source_directory
的目录(即保持目录结构),上面的命令就是这样做的。但如果你只想在destination_directory/
下复制source_directory
的内容(不包括source_directory
目录本身),你应该这样做:cp -a source_directory/* destination_directory/
注意:使用
*
时,如果source_directory
包含以.
开头的隐藏文件或目录,你可能需要使用shopt -s dotglob
命令来使shell包含这些文件,或者使用更具体的命令来复制它们。 -
复制文件,保留所有属性:
cp -a source_file destination_file
在这个例子中,即使你只是在复制一个文件,
-a
选项也会确保文件的权限、所有权、时间戳等属性都被保留。然而,对于单个文件来说,通常不需要-a
的所有功能,因此你可能只会使用-p
(保留文件属性)或默认行为(不添加任何特定选项)。不过,使用-a
也不会有问题,它只是提供了额外的保证。
CentOS7.9的 cp --help
用法:cp [选项]... [-T] 源文件 目标文件
或:cp [选项]... 源文件... 目录
或:cp [选项]... -t 目录 源文件...
Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.
Mandatory arguments to long options are mandatory for short options too.
-a, --archive 等于-dR --preserve=all
--attributes-only 仅复制属性而不复制数据 --backup[=CONTROL 为每个已存在的目标文件创建备份
-b 类似--backup 但不接受参数
--copy-contents 在递归处理是复制特殊文件内容
-d 等于--no-dereference --preserve=links
-f, --force if an existing destination file cannot be
opened, remove it and try again (this option
is ignored when the -n option is also used)
-i, --interactive prompt before overwrite (overrides a previous -n
option)
-H follow command-line symbolic links in SOURCE
-l, --link hard link files instead of copying
-L, --dereference always follow symbolic links in SOURCE
-n, --no-clobber 不要覆盖已存在的文件(使前面的 -i 选项失效)
-P, --no-dereference 不跟随源文件中的符号链接
-p 等于--preserve=模式,所有权,时间戳
--preserve[=属性列表 保持指定的属性(默认:模式,所有权,时间戳),如果
可能保持附加属性:环境、链接、xattr 等
-c deprecated, same as --preserve=context
--sno-preserve=属性列表 不保留指定的文件属性
--parents 复制前在目标目录创建来源文件路径中的所有目录
-R, -r, --recursive 递归复制目录及其子目录内的所有内容
--reflink[=WHEN] 控制克隆/CoW 副本。请查看下面的内如。
--remove-destination 尝试打开目标文件前先删除已存在的目的地
文件 (相对于 --force 选项)
--sparse=WHEN 控制创建稀疏文件的方式
--strip-trailing-slashes 删除参数中所有源文件/目录末端的斜杠
-s, --symbolic-link 只创建符号链接而不复制文件
-S, --suffix=后缀 自行指定备份文件的后缀
-t, --target-directory=目录 将所有参数指定的源文件/目录
复制至目标目录
-T, --no-target-directory 将目标目录视作普通文件
-u, --update 只在源文件比目标文件新,或目标文件
不存在时才进行复制
-v, --verbose 显示详细的进行步骤
-x, --one-file-system 不跨越文件系统进行操作
-Z set SELinux security context of destination
file to default type
--context[=CTX] like -Z, or if CTX is specified then set the
SELinux or SMACK security context to CTX
--help 显示此帮助信息并退出
--version 显示版本信息并退出
默认情况下,源文件的稀疏性仅仅通过简单的方法判断,对应的目标文件目标文件也
被为稀疏。这是因为默认情况下使用了--sparse=auto 参数。如果明确使用
--sparse=always 参数则不论源文件是否包含足够长的0 序列也将目标文件创文
建为稀疏件。
使用--sparse=never 参数禁止创建稀疏文件。
当指定了--reflink[=always] 参数时执行轻量化的复制,即只在数据块被修改的
情况下才复制。如果复制失败或者同时指定了--reflink=auto,则返回标准复制模式。
The backup suffix is '~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.
The version control method may be selected via the --backup option or through
the VERSION_CONTROL environment variable. Here are the values:
none, off 不进行备份(即使使用了--backup 选项)
numbered, t 备份文件加上数字进行排序
existing, nil 若有数字的备份文件已经存在则使用数字,否则使用普通方式备份
simple, never 永远使用普通方式备份
有一个特别情况:如果同时指定--force 和--backup 选项,而源文件和目标文件
是同一个已存在的一般文件的话,cp 会将源文件备份。
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
请向<http://translationproject.org/team/zh_CN.html> 报告cp 的翻译错误
要获取完整文档,请运行:info coreutils 'cp invocation'
Fedora40 的 cp --help
用法:cp [选项]... [-T] 源 目标
或:cp [选项]... 源... 目录
或:cp [选项]... -t 目录 源...
将 <源> 复制至 <目标>,或将多个 <源> 复制至 <目录>。
长选项的必选参数对于短选项也是必选的。
-a, --archive 等于 -dR --preserve=all
--attributes-only 仅复制属性而不复制文件数据
--backup[=控制] 为每个已存在的目标文件创建备份
-b 类似 --backup 但不接受参数
--copy-contents 在递归操作时复制特殊文件的内容
-d 等于 --no-dereference --preserve=links
--debug 解释文件是如何复制的。隐含启用 -v
-f, --force 如果已存在的目标文件无法打开,则将其删除并重试
(该选项在与 -n 选项同时使用时将被忽略)
-i, --interactive 覆盖前询问(使前面的 -n 选项失效)
-H 跟随命令行里的 <源> 中的符号链接
-l, --link 硬链接文件以代替复制
-L, --dereference 总是跟随 <源> 里的符号链接
-n, --no-clobber 不要覆盖已存在的文件(使 -u 和前面的 -i 选项
失效)。参见 --update
-P, --no-dereference 从不跟随 <源> 里的符号链接
-p 等于--preserve=mode,ownership,timestamps
--preserve[=属性列表] 保留指定的文件属性
--no-preserve=属性列表 不保留指定的属性
--parents 在 <目录> 下使用完整的源文件路径
-R, -r, --recursive 递归地复制目录
--reflink[=何时] 控制克隆/CoW 副本。见下文
--remove-destination 尝试打开目标文件前先删除已存在的目标
文件(和 --force 选项有区别)
--sparse=何时 控制创建稀疏文件的方式。见下文
--strip-trailing-slashes 删除参数中所有 <源> 末尾的斜杠
-s, --symbolic-link 只创建符号链接而不复制文件
-S, --suffix=后缀 自行指定备份文件的后缀
-t, --target-directory=目录 将所有 <源> 参数复制到 <目录>
-T, --no-target-directory 将 <目标> 视为普通文件
--update[=更新] 控制更新哪些已存在的文件;
<更新>={all,none,older(默认)}。见下
-u 等价于 --update[=older]
-v, --verbose 显示详细步骤
-x, --one-file-system 仅在此文件系统上进行操作
-Z 设置目标文件的 SELinux 安全上下文为默认类型
--context[=上下文] 类似 -Z,但如果指定了 <上下文>,则将 SELinux
或 SMACK 安全上下文设置为 <上下文>
--help 显示此帮助信息并退出
--version 显示版本信息并退出
<属性列表> 是用逗号分隔的属性列表。可用的属性有:"mode" 表示权限(包括所有 ACL
和 xattr 权限)、"ownership" 表示所有者和属组、"timestamps" 表示文件时间戳、
"links" 表示硬链接、"context" 表示安全上下文、"xattr" 表示扩展属性,以及
"all" 表示所有属性。
默认情况下,将通过简单的启发式算法检测稀疏的 <源> 文件,并将对应的 <目标>
文件设为稀疏。这也是 --sparse=auto 的行为。若使用 --sparse=always,则只要
<源> 文件包含了足够长的零字节序列,都会将 <目标> 文件创建为稀疏文件。
使用 --sparse=never 可以禁止创建稀疏文件。
<更新> 控制替换目标中的哪些已存在的文件。
"all" 在未指定 --update 选项时是默认操作,会替换目标中所有已存在的文件。
"none" 和 --no-clobber 选项类似,不会替换目标中的任何文件,区别在于跳过文件
不会使命令失败。
"older" 在指定了 --update 选项时是默认操作,会替换目标中比对应的源文件
更旧的文件。
当指定了 --reflink[=always] 参数时,将进行轻量级复制,此时数据块只在被修改时
进行复制。如果因无法进行这种复制而导致复制失败,或者指定了 --reflink=auto,
程序将会回退到标准复制操作。使用 --reflink=never 可以确保永远进行标准复制。
备份文件的后缀为 "~",除非使用了 --suffix 选项或 SIMPLE_BACKUP_SUFFIX 环境变量
指定了其他后缀。版本控制的方式可通过 --backup 选项或 VERSION_CONTROL 环境变量
来选择。以下是可用的设置值:
none, off 不进行备份(即使使用了 --backup 选项)
numbered, t 使用带有数字编号的备份文件进行备份
existing, nil 若带数字的备份文件已经存在则使用 numbered,否则使用 simple
simple, never 总是使用简单方式进行备份
有一个特殊情况:如果同时指定 --force 和 --backup 选项,而 <源> 和 <目标>
是同一个已存在的普通文件的话,cp 会对 <源> 进行备份。
GNU coreutils 在线帮助:<https://www.gnu.org/software/coreutils/>
请向 <http://translationproject.org/team/zh_CN.html> 报告任何翻译错误
完整文档 <https://www.gnu.org/software/coreutils/cp>
或者在本地使用:info '(coreutils) cp invocation'
Ubuntu24.04Desktop 的 cp --help
用法:cp [选项]... [-T] 源 目标
或:cp [选项]... 源... 目录
或:cp [选项]... -t 目录 源...
将 <源> 复制至 <目标>,或将多个 <源> 复制至 <目录>。
长选项的必选参数对于短选项也是必选的。
-a, --archive 等于 -dR --preserve=all
--attributes-only 仅复制属性而不复制文件数据
--backup[=控制] 为每个已存在的目标文件创建备份
-b 类似 --backup 但不接受参数
--copy-contents 在递归操作时复制特殊文件的内容
-d 等于 --no-dereference --preserve=links
--debug 解释文件是如何复制的。隐含启用 -v
-f, --force 如果已存在的目标文件无法打开,则将其删除并重试
(该选项在与 -n 选项同时使用时将被忽略)
-i, --interactive 覆盖前询问(使前面的 -n 选项失效)
-H 跟随命令行里的 <源> 中的符号链接
-l, --link 硬链接文件以代替复制
-L, --dereference 总是跟随 <源> 里的符号链接
-n, --no-clobber do not overwrite an existing file and do not fail
(overrides a -u or previous -i option). See also
--update; equivalent to --update=none.
-P, --no-dereference 从不跟随 <源> 里的符号链接
-p 等于--preserve=mode,ownership,timestamps
--preserve[=属性列表] 保留指定的文件属性
--no-preserve=属性列表 不保留指定的属性
--parents 在 <目录> 下使用完整的源文件路径
-R, -r, --recursive 递归地复制目录
--reflink[=何时] 控制克隆/CoW 副本。见下文
--remove-destination 尝试打开目标文件前先删除已存在的目标
文件(和 --force 选项有区别)
--sparse=何时 控制创建稀疏文件的方式。见下文
--strip-trailing-slashes 删除参数中所有 <源> 末尾的斜杠
-s, --symbolic-link 只创建符号链接而不复制文件
-S, --suffix=后缀 自行指定备份文件的后缀
-t, --target-directory=目录 将所有 <源> 参数复制到 <目录>
-T, --no-target-directory 将 <目标> 视为普通文件
--update[=更新] 控制更新哪些已存在的文件;
<更新>={all,none,older(默认)}。见下
-u 等价于 --update[=older]
-v, --verbose 显示详细步骤
-x, --one-file-system 仅在此文件系统上进行操作
-Z 设置目标文件的 SELinux 安全上下文为默认类型
--context[=上下文] 类似 -Z,但如果指定了 <上下文>,则将 SELinux
或 SMACK 安全上下文设置为 <上下文>
--help 显示此帮助信息并退出
--version 显示版本信息并退出
<属性列表> 是用逗号分隔的属性列表。可用的属性有:"mode" 表示权限(包括所有 ACL
和 xattr 权限)、"ownership" 表示所有者和属组、"timestamps" 表示文件时间戳、
"links" 表示硬链接、"context" 表示安全上下文、"xattr" 表示扩展属性,以及
"all" 表示所有属性。
默认情况下,将通过简单的启发式算法检测稀疏的 <源> 文件,并将对应的 <目标>
文件设为稀疏。这也是 --sparse=auto 的行为。若使用 --sparse=always,则只要
<源> 文件包含了足够长的零字节序列,都会将 <目标> 文件创建为稀疏文件。
使用 --sparse=never 可以禁止创建稀疏文件。
<更新> 控制替换目标中的哪些已存在的文件。
"all" 在未指定 --update 选项时是默认操作,会替换目标中所有已存在的文件。
"none" 和 --no-clobber 选项类似,不会替换目标中的任何文件,区别在于跳过文件
不会使命令失败。
"older" 在指定了 --update 选项时是默认操作,会替换目标中比对应的源文件
更旧的文件。
当指定了 --reflink[=always] 参数时,将进行轻量级复制,此时数据块只在被修改时
进行复制。如果因无法进行这种复制而导致复制失败,或者指定了 --reflink=auto,
程序将会回退到标准复制操作。使用 --reflink=never 可以确保永远进行标准复制。
备份文件的后缀为 "~",除非使用了 --suffix 选项或 SIMPLE_BACKUP_SUFFIX 环境变量
指定了其他后缀。版本控制的方式可通过 --backup 选项或 VERSION_CONTROL 环境变量
来选择。以下是可用的设置值:
none, off 不进行备份(即使使用了 --backup 选项)
numbered, t 使用带有数字编号的备份文件进行备份
existing, nil 若带数字的备份文件已经存在则使用 numbered,否则使用 simple
simple, never 总是使用简单方式进行备份
有一个特殊情况:如果同时指定 --force 和 --backup 选项,而 <源> 和 <目标>
是同一个已存在的普通文件的话,cp 会对 <源> 进行备份。
GNU coreutils 在线帮助:<https://www.gnu.org/software/coreutils/>
请向 <http://translationproject.org/team/zh_CN.html> 报告任何翻译错误
完整文档 <https://www.gnu.org/software/coreutils/cp>
或者在本地使用:info '(coreutils) cp invocation'
Ubuntu20.04.6 的 cp --help
用法:cp [选项]... [-T] 源文件 目标文件
或:cp [选项]... 源文件... 目录
或:cp [选项]... -t 目录 源文件...
将指定<源文件>复制至<目标文件>,或将多个<源文件>复制至<目标目录>。
必选参数对长短选项同时适用。
-a, --archive 等于-dR --preserve=all
--attributes-only 仅复制属性而不复制数据 --backup[=CONTROL 为每个已存在的目标文件创建备份
-b 类似--backup 但不接受参数
--copy-contents 在递归处理是复制特殊文件内容
-d 等于--no-dereference --preserve=links
-f, --force 如果有已存在的目标文件且无法打开,则将其删除并重试
(该选项在与 -n 选项同时使用时将被忽略)
-i, --interactive 覆盖前询问(使前面的 -n 选项失效)
-H 跟随源文件中的命令行符号链接
-l, --link 硬链接文件以代替复制
-L, --dereference 总是跟随源文件中的符号链接
-n, --no-clobber 不要覆盖已存在的文件(使前面的 -i 选项失效)
-P, --no-dereference 不跟随源文件中的符号链接
-p 等于--preserve=模式,所有权,时间戳
--preserve[=属性列表 保持指定的属性(默认:模式,所有权,时间戳),如果
可能保持附加属性:上下文、链接、xattr 等
--sno-preserve=属性列表 不保留指定的文件属性
--parents 复制前在目标目录创建来源文件路径中的所有目录
-R, -r, --recursive 递归复制目录及其子目录内的所有内容
--reflink[=WHEN] 控制克隆/CoW 副本。请查看下面的内如。
--remove-destination 尝试打开目标文件前先删除已存在的目的地
文件 (相对于 --force 选项)
--sparse=WHEN 控制创建稀疏文件的方式
--strip-trailing-slashes 删除参数中所有源文件/目录末端的斜杠
-s, --symbolic-link 只创建符号链接而不复制文件
-S, --suffix=后缀 自行指定备份文件的后缀
-t, --target-directory=目录 将所有参数指定的源文件/目录
复制至目标目录
-T, --no-target-directory 将目标目录视作普通文件
-u, --update 只在源文件比目标文件新,或目标文件
不存在时才进行复制
-v, --verbose 显示详细的进行步骤
-x, --one-file-system 不跨越文件系统进行操作
-Z 设置目标文件的 SELinux 安全上下文为默认类型
--context[=上下文] 类似 -Z;如果指定了上下文,则将 SELinux 或
SMACK 安全上下文设置为指定值
--help 显示此帮助信息并退出
--version 显示版本信息并退出
默认情况下,源文件的稀疏性仅仅通过简单的方法判断,对应的目标文件目标文件
也将设为稀疏。这是因为默认情况下使用了--sparse=auto 参数。如果明确使用
--sparse=always 参数,则不论源文件是否包含足够长的 0 序列,都会将目标文件
创建为稀疏文件。使用 --sparse=never 参数可以禁止创建稀疏文件。
当指定了 --reflink[=always] 参数时,将进行轻量级复制,此时数据块只在被修改时
进行复制,如果无法如此操作则复制将会失败。或者如果指定了 --reflink=auto,程序
将会回退到标准复制操作。使用 --reflink=never 可以确保永远进行标准复制。
备份文件的后缀为"~",除非以--suffix 选项或是 SIMPLE_BACKUP_SUFFIX
环境变量指定。版本控制的方式可通过--backup 选项或 VERSION_CONTROL 环境
变量来选择。以下是可用的变量值:
none, off 不进行备份(即使使用了--backup 选项)
numbered, t 备份文件加上数字进行排序
existing, nil 若有数字的备份文件已经存在则使用数字,否则使用普通方式备份
simple, never 永远使用普通方式备份
有一个特别情况:如果同时指定--force 和--backup 选项,而源文件和目标文件
是同一个已存在的一般文件的话,cp 会将源文件备份。
GNU coreutils 在线帮助:<https://www.gnu.org/software/coreutils/>
请向 <http://translationproject.org/team/zh_CN.html> 报告 cp 的翻译错误
完整文档请见:<https://www.gnu.org/software/coreutils/cp>
或者在本地使用:info '(coreutils) cp invocation'