一部のGNU Coreutilsコマンドに-T/--no-target-directoryオプションがあるのはなぜですか?.従来のUnixディレクトリ階層の(自己ドット)のセマンティクスを使用して、それが行うすべてのことを達成できるようです。
考慮:
cp -rT /this/source dir
この-Tオプションは、コピーがdir/sourceサブディレクトリを作成しないようにします。むしろ/this/sourceと識別されdir、コンテンツはそれに応じてツリー間でマッピングされます。そのため、たとえばにではなく、に/this/source/foo.c進みます。dir/foo.cdir/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、競合状態なしに、ワンステップでそれなしではできないことを示しました。ファイルをコピーし、サブディレクトリに迂回せずに名前を変更します。