同じフォルダを持つ別のディレクトリ内のディレクトリのコンテンツを移動したい。
以下に例を示します。
ディレクトリbase
およびtest
を持つ./backup
があります。次に、これらのディレクトリを./backupArchives
に移動します。
私はこれを使用します:
mv ./backup/* ./backupArchives
しかし、私はエラーを受け取りました
mv: cannot move './backup/base' to './backupsArchive/base': Directory not empty
--force
を使用してみましたが、運はありません。フォルダーが既に存在する場合に移動する方法はありますか?
注:内容をマージしたいだけです。上書きはありません。
マニュアルページにはドキュメントがありませんが、ターゲットディレクトリにファイルが含まれている場合、mv
はディレクトリの名前を別のディレクトリに変更することを拒否します。これは、mergeソースのコンテンツをターゲットにしたいことが判明したため、良いことです。これは、mv
は行いません。
代わりにrsync -a backup/ backupArchives/
を使用してください。その後rm -rf backup/*
。
rsync
を使用する代わりに、古典的な
(cd backup && tar c .) | (cd backupArchives && tar xf -)
オタクポイントが増えます。
あなたが何をしているのかを知っていれば、迅速で汚い:
cp -r ./backup/* ./backupArchives && rm -R ./backup/*
移動するディレクトリの後には、*
(テキストまたは数字を表す)が必要です。例えば:
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
ディレクトリを再確認してください。
質問する前に、簡単なケースを考えてみましょう。
/ home/adminに、同じサブディレクトリ構造を持つ2つのフォルダーfoo
およびbar
があり、それぞれに異なるファイルが含まれているとします。次に、それらを1つにマージします。 mv foo/* bar
のようなことを行うと、エラーmv: directory not empty
が発生します。
私の解決策は、コマンドラインツールを放棄し、GUIファイルマネージャー(ドルフィンなど)に切り替えることです。 dolphinでfoo
の名前をbar
に変更すると、宛先フォルダーに書き込むオプションが表示され、既存のファイルをインタラクティブに上書きするかどうかを尋ねられます。これにより、コピーと削除が回避され、1行のコードなしで時間を節約できます。
PS:そこにあるすべてのファイルマネージャーをテストしたわけではありません。しかし、それらのほとんどにはこの機能が必要です。