17

いくつかのタスクを実行するBourneシェルスクリプトがあります。これらのタスクの1つは、いくつかのファイルを特定のディレクトリに移動することです。今日、スクリプトを実行すると、次のメッセージが表示されました。

mv: will not overwrite just-created <filename> with <sameFilename>

ここで、filenameはフルパスを含む元のファイル名であり、sameFilenameはまったく同じファイルとパスです。私はこのスクリプトを毎日定期的に使用していますが、これまでこのメッセージを受け取ったことはありません。

スクリプトを実行した直後に、エラーが続くかどうかを確認するためにスクリプトを再実行しましたが、再度実行することはできませんでした。このスクリプトはRedHat5Enterpriseで実行しています。

4

2 に答える 2

17

これを再現する方法は次のとおりです。

> mkdir a b c
> touch a/file
> touch b/file
> mv a/file b/file c/
mv: will not overwrite just-created `c/file' with `b/file'

これを再現する方法は他にもあるかもしれませんが、上記のことが起こったと想定するのは合理的です。

つまり、スクリプトは1つのmvコマンドで同じ名前の複数のファイルを同じターゲットに移動しました。上記を実行すると、a/fileが正常に移動された(そしてそのb/fileままになっている)ことに気付くので、次に実行すると、問題はおそらく解消されます。

于 2011-01-12T14:06:01.270 に答える
8

これは、同じ名前の2つの異なるファイルが1つのコマンドだけで同じ場所に移動されるために発生します。-fオプションはこの場合には役立ちません。これは、mvコマンドの実行時に上書きされるターゲットファイルがすでに存在する場合にのみ適用されます。発生するのは、mvによって最初に検出されたファイルの1つが移動され、2番目のファイルの移動を拒否することです(これにより、ユーザーデータが失われるリスクがある他のファイルが上書きされます)。この動作は、同じ名前のファイルが2つしかない場合、コマンドを2回実行したときに警告が消えることも説明しています。

ただし、ディレクトリツリーに同じ名前のファイルが多数ある場合、警告は何度も実行されてもそこにとどまる可能性があります。

この警告を回避する方法を知っている場合は、--backup=numberedmvにオプションを追加しています。ターゲットファイルは上書きされませんが、衝突が発生するたびにバックアップファイルが作成されます。これらを削除するというアイデアの場合は、後で.を使用して簡単に実行できますrm *~

于 2014-01-22T22:51:51.860 に答える