web-dev-qa-db-ja.com

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

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

以下に例を示します。

ディレクトリbaseおよびtestを持つ./backupがあります。次に、これらのディレクトリを./backupArchivesに移動します。

私はこれを使用します:

mv ./backup/* ./backupArchives

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

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

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

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

151
UdK

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

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

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

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

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

185
zwets

あなたが何をしているのかを知っていれば、迅速で汚い:

cp -r ./backup/* ./backupArchives && rm -R ./backup/*
37
patrickvacek

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

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/

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

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

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

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

注1:cp -R --parents ...を実行する前に、cdディレクトリにbackupする必要があります

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

4

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

/ home/adminに、同じサブディレクトリ構造を持つ2つのフォルダーfooおよびbarがあり、それぞれに異なるファイルが含まれているとします。次に、それらを1つにマージします。 mv foo/* barのようなことを行うと、エラーmv: directory not emptyが発生します。

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

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

1
navigaid