GNU/Linux >> Linux の 問題 >  >> Linux

フォルダーをコピーするときに、ソースと宛先の後に末尾のスラッシュを付けるべきですか

末尾に / を入れてみます

私が間違えて、ソースとターゲットが両方ともディレクトリではなくファイルである場合、 / を追加します エラーが発生することを意味します。 / なし ターゲットファイルを破壊します。

(タブ補完は通常、末尾に / を追加します とにかく、通常は追加しないよりも追加する方が簡単です.)

詳細については、Volker Siegel の回答を参照してください。


ソース ディレクトリに末尾のスラッシュがない

すべきではない ソース ディレクトリの末尾にスラッシュを付けます:

ポイントは cp に関連しています - だけでなく、mv にも 、はるかにより重要です .

マニュアルの警告を引用します - マニュアルページではなく、情報ページ info coreutils 'mv invocation' にあることに注意してください :

<ブロック引用>

警告 :ディレクトリへのシンボリック リンクである可能性がある場合は、ソース名の末尾にスラッシュを付けて指定しないでください。それ以外の場合、'mv' は非常に驚くべきことを行う可能性があります。これは、その動作が基になる rename システム コールに依存するためです。最新の Linux ベースのカーネルを搭載したシステムでは、「errno=ENOTDIR」で失敗します。ただし、他のシステム (少なくとも FreeBSD 6.1 と Solaris 10) では、シンボリック リンクではなく、シンボリック リンクが参照するディレクトリの名前を黙って変更します。

宛先ディレクトリで末尾のスラッシュを使用する

ファイルとディレクトリをディレクトリに移動する場合は、移動先ディレクトリの末尾にスラッシュを追加する必要があります。
すべてがうまくいく限り、何も変わりません。
ただし、データの損失や変更を引き起こす一般的なエラーからあなたを救うことができます:

ファイルをディレクトリに移動すると、次の 2 つの問題が発生する可能性があります。
宛先ディレクトリ名の最後の構成要素のスペルが間違っている可能性があります (1 文字間違っているなど)。発生する可能性があるのは、次の 2 つのケースです:

  • 名前のつづりが一致しない場合 存在する:

    • ファイルはスペルミスのある名前に変更されます

    • 目的の宛先の親ディレクトリに移動されます

    • したがって、それは実際にはなかったし、期待していた場所にもなりません。

  • 名前のつづりが間違っている場合 そう 存在し、ファイルです:

    • このファイルは、宛先の親ディレクトリにあるスペルミスのある名前のファイルを上書きします。

    • 繰り返しますが、それがあったかどうか、またはあるべき場所にあることを見つけることはできません。ただ消えてしまったのです。

宛先ディレクトリで末尾のスラッシュを使用すると、両方のケースが防止されます:

mv になります 通常はファイル名として使用しないでください。代わりに、mv エラーが発生するだけです:

mv: failed to access ‘foo/’: Not a directory

スラッシュを自動的に削除

cp には特別なオプションがあります および mv 常に src ディレクトリからスラッシュを取り除くことでリスクを軽減します:

Some GNU programs (at least `cp' and `mv') allow you to remove any
trailing slashes from each SOURCE argument before operating on it.  The
`--strip-trailing-slashes' option enables this behavior.

   This is useful when a SOURCE argument may have a trailing slash and
specify a symbolic link to a directory.  This scenario is in fact rather
common because some shells can automatically append a trailing slash
when performing file name completion on such symbolic links.  Without
this option, `mv', for example, (via the system's rename function) must
interpret a trailing slash as a request to dereference the symbolic link
and so must rename the indirectly referenced _directory_ and not the
symbolic link.  Although it may seem surprising that such behavior be
the default, it is required by POSIX and is consistent with other parts
of that standard.

Linux
  1. フォルダをMvとマージしますか?

  2. ディレクトリで末尾のスラッシュを使用する必要があるのはいつですか?

  3. いつソースからコンパイルしてインストールする必要がありますか?

  1. 「ls-a」と入力すると、「。」の意味は何ですか。と ".."?

  2. いつ、なぜApt-get Updateを使用する必要がありますか?

  3. Linux:宛先ディレクトリが存在しない場合は、コピーして作成します

  1. 2つのフォルダを比較し、違いを3番目のフォルダにコピーする方法は?

  2. 複数の実行可能スクリプトを1つのディレクトリに配置し、そのディレクトリをソーシングすることで、これらのコマンドをすべて使用できるようにすることはできますか?

  3. Cpスイッチを使用して特定の日付の後に変更されたファイルをコピーしますか?