为什么某些GNU Coreutils命令可以-T/--no-target-directory
选择?看起来它所做的所有事情都可以使用.
传统Unix目录层次结构中(自我点)的语义来实现。
考虑:
cp -rT /this/source dir
该-T
选项可防止副本创建dir/source
子目录。而是用/this/source
标识,dir
并且内容相应地映射在树之间。因此,例如/this/source/foo.c
去dir/foo.c
等等,而不是去dir/source/foo.c
。
但这可以轻松实现,而无需-T
使用以下选项:
cp -r /this/source/. dir # Probably worked fine since dawn of Unix?
语义上,尾随点组件被复制为的子元素dir
,但当然“子”已经存在(因此不必创建)并且实际上是dir
其本身,因此其效果/this/path
由标识dir
。
如果当前目录是目标目录,则可以正常工作:
cp -r /this/tree/node/. . # node's children go to current dir
有什么事你可以做的只能用-T
能合理化它的存在?(除了支持未实现点目录的操作系统外,文档中未提及的基本原理。)
上面的点技巧是否不能解决GNU Info文档中提到的相同竞争条件-T
?
.
招确实复制文件时,在同一时间只是不重命名它的基本名称,当工作!cp /path/to/file /target/dir/.
如果/target/dir/file
存在并且是目录,则将得到相同的诊断!但是,您已经展示了-T
没有竞争条件就一步一步就能完成的工作:复制文件并更改文件名而不将其分流到子目录。