GNU/Linux >> Linux の 問題 >  >> Linux

フォルダをMvとマージしますか?

mvを使用する場合 「folder」というフォルダを「folder」がすでに含まれているディレクトリに移動すると、それらはマージされますか、それとも置き換えられますか?

承認された回答:

mv ディレクトリをマージまたは上書きできません。「mv:「a」を「b」に移動できません:ディレクトリが空ではありません」というメッセージが表示されて失敗します--forceを使用している場合でも オプション。

他のツール(rsyncなど)を使用してこれを回避できます 、find 、またはcp )、ただし、その影響を慎重に検討する必要があります:

  • rsync あるディレクトリの内容を別のディレクトリにマージできます(理想的には--remove-source-filesを使用) 正常に転送されたソースファイルのみを安全に削除するオプションで、通常の権限/所有権/時間保存オプション-a 必要に応じて)
    しかし これはフルコピー操作であるため、ディスクを大量に消費する可能性があります。
  • 現在推奨されているオプション: rsyncを組み合わせることができます の--link-dest=DIR オプション(可能な場合はファイルの内容をコピーする代わりにハードリンクを作成する)および--remove-source-files 通常のmvと非常によく似たセマンティックを取得します 。
    このために、--link-dest ソースへの絶対パスを指定する必要があります ディレクトリ(または宛先からの相対パス ソースへ )。
    しかし これは--link-destを使用しています 意図しない方法で(複雑になる場合と引き起こさない場合があります)、ソースへの絶対パスを知る(または決定する)必要があります(--link-destへの引数として) )、そして再び空のディレクトリ構造を残して、に従ってクリーンアップします。
  • findを使用できます ターゲットでソースディレクトリ構造を順番に再作成してから、実際のファイルを個別に移動します
    しかし これはソースを複数回繰り返す必要があり、競合状態が発生する可能性があります(マルチステッププロセス中にソースで新しいディレクトリが作成されます)
  • cp ハードリンク(簡単に言えば、同じ既存のファイルへの追加のポインタ)を作成できます。これにより、mvのマージと非常によく似た結果が作成されます。 (ポインタのみが作成され、実際のデータをコピーする必要がないため、IO効率が非常に高くなります)
    しかし これも競合状態の可能性があります(前の手順でコピーされていなくても、ソースの新しいファイルが削除されます)

これらの回避策(ある場合)のどれが適切かは、特定のユースケースに大きく依存します。
いつものように、これらのコマンドのいずれかを実行する前に考えて、バックアップを作成してください。

関連:ProアカウントなしでDropboxに20GBを超えるフォルダをダウンロードするにはどうすればよいですか?

1:rsync --remove-source-filesに注意してください ディレクトリは削除されないため、find -depth -type d -empty -deleteのような操作を行う必要があります。 その後、空のソースディレクトリツリーを削除します。


Linux
  1. Rsyncを使用してディレクトリ/フォルダで変更された日付を保持しますか?

  2. Linuxでduコマンドを使用してディレクトリサイズを確認する

  3. ハウツー:Linux でのディレクトリを使用した C プログラミング

  1. ソース ファイルが異なるディレクトリにある Makefile

  2. 現在のディレクトリでスクリプトを入手できません

  3. ディレクトリ内のすべてのフォルダーのサイズを取得する

  1. 「でスクリプトを実行します。 」と「ソース」で?

  2. ディレクトリ付きの猫ファイル?

  3. 3つの連続した行をスワップとマージしますか?