mv:ディレクトリが空ではありません


155

同じフォルダを持つ別のディレクトリ内のディレクトリのコンテンツを移動したい。

以下に例を示します。

私がしている./backupウィッヒディレクトリを持っているbasetest。次に、これらのディレクトリをに移動し./backupArchivesます。

私はこれを使用します:

mv ./backup/* ./backupArchives

しかし、私はエラーを受け取りました

mv: cannot move './backup/base' to './backupsArchive/base': Directory not empty

を使用してみました--forceが、運はありません。フォルダーが既に存在する場合に移動する方法はありますか?

注:内容をマージしたいだけです。上書きはありません。


フォルダのコンテンツを宛先にマージしようとしているだけですか、それとも宛先にあるものを上書きしようとしていますか。(データを切り捨てるために......を使用せずにENTIREエラーが発生した場合にも役立ちます)
トーマスウォード

内容をマージしたいだけで、上書きはありません。
UdK

2
@UdKこれが機能する場合でも、2つのディレクトリの内容がマージされないことに注意してください。ディレクトリを移動すると、そのターゲットが置き換えられます。見ているrsync代わりに、それがマージを行います。
-zwets

回答:


188

そのマニュアルページにはドキュメントがありませんがmv、ターゲットディレクトリにファイルが含まれている場合、ディレクトリの名前を別のディレクトリに変更することは拒否されます。これは、ソースのコンテンツをターゲットにマージしたいこと判明したため、あなたの場合には良いことmvです。

rsync -a backup/ backupArchives/代わりに使用してください。その後rm -rf backup/*

を使用する代わりにrsync、古典的な

(cd backup && tar c .) | (cd backupArchives && tar xf -)

オタクポイントが増えます。


4
知っておくと良いこと!両方ともうまく機能しています。ありがとう!
UdK

5
オタクポイントが最高のポイントです:D
MadMike

2
これには、空き領域にフォルダのサイズが必要であることに注意してください。そうでなければ、恐ろしい問題を引き起こします。
ポグリンディス14年

4
@Pogrindisどのような恐ろしい問題が発生するのか、そしてそれらがフルディスクに書き込む他の試みとどのように異なるのか説明してください。確かに、両方の操作が元のディレクトリをそのまま保持するため、操作が失敗した場合、rm -rf backupArchives「恐ろしい」操作は言うまでもなく、単に結果に失敗します。
zwets 14年

4
古典的なアプローチに名前を付けてくれてありがとう、rsyncが利用できない場合に非常に役立ちます!を使用してsudoでも動作しますsudo sh -c '(cd backup && tar c .) | (cd backupArchives && tar xf -)'
-ArendE


4

移動するディレクトリの後に必要なもの*(テキストまたは数字を表します)。例えば:

mv /var/www/* /recovery/wwwrecovery/

ファイルを移動する場合は、次のように移動するよりもすべてです。

mv /var/www/index.php /recovery/index.php

別の方法は、tarを使用してそのフォルダーの内容をパックすることです。

tar -cvzpf backup.tar.gz /var/www 

次に、他のファイルに移動します。また、tarが圧縮してサイズを小さくするため、この手順をお勧めします。

ファイルを別のフォルダーに抽出するには

tar -xvzpf /var/www/

自分が所有していない場所にコピーする必要がある場合はsudo、使用するオプションの後にコマンドをコマンドの先頭に追加してください。

sudo tar -cvzpf backup.tar.gz /var/www/

Ubuntu 12.10を使用しています。mv:invalid option-'R'詳細については、「mv --help」を試してください。確かに.tarはいいのですが、この状況でファイルを移動する方法を知る必要があります。ご協力ありがとうございます
-UdK

私は12.04デスクトップとサーバーを使用しており、両方でうまく機能しています。folferと-Rの間にスペースを入れなかった場合は注意してください。私も-Rなしで試してみましたが、私と同じように動作します。-Rなしで試してください。ただし、スペルには注意してください。Linuxは小文字と大文字を区別します!!! パスが不正確なmovinginまたはmovingfrom位置である場合よりも。移動したいフォルダがない場合は、後に-Cを追加するだけで作成されます。また、最初に試してください:フォルダーの -iname nameを見つけて 、ルートからこのコマンドを実行します。スペルが間違っている場合は、他の場所に存在するかどうかを確認するだけです。あなたが使用した正確なコマンドを教えてください
ディミトリステオドリディス

what thaaa ..... betwenにそのファイル名を入れる**
Dimitris Theodoridis

1
それは-R確かに最初の引数の後に来るべきではありません。オプション(ほとんど)は常にコマンド引数の前にあります。また、オプションはありmvません。-R最後に、再帰はaとは無関係mvです。@DimitrisTheodoridisは最初に答えをテストしてください。
zwets

はい、私の兄弟、あなたは正しいです、私はいつも私のスペルに問題があります、そしていつも私はそのための端末に問題があるか、コマンドが見つからないか、私が知らない新しいファイルとディレクトリを作成します、ただbasスペルのために...ところで使用cpコマンド、ここではその仲間のためのMV sory書いたよりも:D
ディミトリスTheodoridis

4

確かにrsync機能しますが、これはサポートしていないマシンでも機能する可能性がありますrsync(つまり、cpanelでは、デフォルトでrsyncがインストールされていません)。

使用についてはどうですか:

cd /path/to/backup/ && cp -R --parents ./* ../backupArchives

次にbackup、必要に応じてディレクトリを削除します

注1:あなたがする必要があるcdbackup実行する前に、ディレクトリcp -R --parents ...

注2:backupArchivesバックアップから新しいファイルを取得した場合は、ディレクトリを再確認してください。


1

質問する前に、簡単なケースを考えてみましょう。

我々は2つのフォルダを持っている/ホーム/ adminに仮定fooし、bar同じサブディレクトリ構造を持っているが、それぞれがその中に別のファイルが含まれています。次に、それらを1つにマージします。のようなことをするmv foo/* barと、エラーmv: directory not emptyが発生します。

私の解決策は、コマンドラインツールを放棄し、たとえばdolphinなどのGUIファイルマネージャーに切り替えることです。dolphinに名前fooを変更するとbar、宛先フォルダーに書き込むオプションが表示され、既存のファイルをインタラクティブに上書きするかどうかを尋ねられます。これにより、コピーと削除が回避され、1行のコードなしで時間を節約できます。

PS:私はそこにあるすべてのファイルマネージャーをテストしませんでした。しかし、それらのほとんどにはこの機能が必要です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.