GNU cpとmvの-Tオプションの追加値は何ですか?

GNU cpとmvの-Tオプションの追加値は何ですか?

一部のGNU Coreutilsコマンドにこの-T/--no-target-directoryオプションがあるのはなぜですか?これが実行するすべての作業.は、従来のUnixディレクトリ階層の(自己点)セマンティクスを使用して実装できるようです。

考えると:

cp -rT /this/source dir

この-Tオプションは、コピーがdir/sourceサブディレクトリを作成するのを防ぎます。代わりに、コンテンツは/this/sourceそれに応じてツリー間で識別されマッピングされます。dirたとえば、toの代わりに等に/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/pathdir

現在のディレクトリがターゲットの場合、これはうまく機能します。

cp -r /this/tree/node/. . # node's children go to current dir

あなたができることがありますか?ただ-Tその存在を合理化できるのか? (ドットディレクトリを実装していないオペレーティングシステムをサポートすることに加えて、これに関する理論的根拠は文書には記載されていません。)

上記のヒントは、GNU Infoドキュメントに記載されているのと同じ競合条件を解決しませんか-T

ベストアンサー1

あなたの.トリックは、ファイルではなくディレクトリをコピーするときにのみ機能します。この-Tオプションはディレクトリとファイルに適用されます。これにより:

cp srcfile destfile

destfileそして、コピーされる名前が付けられたディレクトリがすでにあります。destfile/srcfileこれはおそらく意図的なものではありません。だからあなたは

cp -T srcfile destfile

エラーが正しく発生します。

cp: cannot overwrite directory `destfile' with non-directory

この方法を試してみると、.コピーは機能しません。

cp: cannot stat `srcfile/.`: Not a directory

おすすめ記事