一部の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
、競合状態なしに、ワンステップでそれなしではできないことを示しました。ファイルをコピーし、サブディレクトリに迂回せずに名前を変更します。