mvコマンドを使用してあるフォルダから別のフォルダにファイルを移動する - 奇妙な例

mvコマンドを使用してあるフォルダから別のフォルダにファイルを移動する - 奇妙な例

Unixコマンドを学んでいます。surrey.ac.ukの初心者のためのUNIXチュートリアルそこで私はファイルを移動する奇妙な方法を見つけました。具体的には、私のホームディレクトリにunixstuffフォルダがあり、unixstuff内にバックアップフォルダとCaiti.txtとCaiti.bakファイルがあります。

上記のリンクによれば、Caiti.bakファイルをunixstuffからバックアップに移動するには、現在のディレクトリがunixstuffであることを確認し、次のコマンドを実行する必要がありました。

mv Caiti.bak backups/.

これらの文字が何を意味するのかを説明してください/.。点は現在のディレクトリ(この場合はunixstuff)を表します。次のコマンドを実行すると:

mv Caiti.bak backups

とにかく動作します。

答え1

長い話を短く

これにより、ターゲットが既存のディレクトリになるように強制されます。それ以外の場合、コマンドは何の効果もなく失敗し、安全装置として使用されます。


意味.

一般的なUnix / Unixファミリーファイルシステムの各ディレクトリには2つの特別なディレクトリがあります。 1つはそのディレクトリを参照し、もう1.つはそのディレクトリがある親ディレクトリを参照します(..ディレクトリ階層から戻ることができます)。彼らは発見された場所に関連しています。したがって、.ディレクトリ内にはbackups referenceというディレクトリがありますbackups。つまり、というディレクトリが存在する場合とbackups同じbackups/.ですbackups


ソースまたはターゲットがファイルまたはディレクトリの場合のその他の動作

  • ディレクトリが存在する場合、両方のコマンドは同じ効果を持ちます。つまり、mv宛先がディレクトリの場合、ソースはそのディレクトリに移動されます。これは予想される結果です。

  • 宛先がbackupsディレクトリ以外のファイルの場合:

    • 最初のケースはエラーのため失敗します。Not a directory
    • 2番目のケースは名前を変更してCaiti.bak上書きします。backups
  • ターゲットが存在しない場合:

    • 最初のケースは失敗します。No such file or directory
    • 2番目のコマンドは、ファイル名をCaiti.bakfileに変更してbackups前の状況を発生させ、次に発生したときにデータを失う可能性があります。

/.存在する必要があるディレクトリターゲットに追加し、エラーが発生した場合はスクリプトを中止することをお勧めします。

/これらすべての場合は、ソースが添付されている場合にのみ同じように機能します。文書ディレクトリではなく。

これを想定できない場合、この例のソースはディレクトリです。

mv somedirectory targetnothere/

失敗しない(そしてディレクトリ入れる代わりに名前が変更されます。どこにもターゲティングしないまたは中止)。追加のコンテンツ.が原因でこのケースは失敗します。

$ mv somedirectory targetnothere/.
mv: cannot move 'somedirectory' to 'targetnothere/.': No such file or directory

関連情報