Як перемістити каталог, файл за файлом? (замість "скопіювати та видалити")


20

Мій комп'ютер має один накопичувач на 500 ГБ.

Я хочу перенести 400 Гб даних з /unencryptedна /encrypted.

Обидва каталоги знаходяться в одному розділі, але /encryptedобробляються шифрами , так mv /uncrypted/* /encryptedщо:

  1. Скопіюйте всі файли до місця призначення
  2. Потім видаліть їх з джерела

... що я не можу собі дозволити, тому що для цього потрібно 800 Гб.
Якби файли переміщувались один за одним, проблем не було б (зона шифрування є динамічною).

Чи є mvопція чи інший інструмент, який переміщує каталог по файлу?
Існує величезна кількість файлів, тому ARG_MAX може бути проблемою для сценарійних рішень.

Відповіді:


20

Якщо у вас є rsync(видаліть, --dry-runщоб зробити це по-справжньому):

rsync --dry-run --remove-source-files -avHAX /unencrypted/ /encrypted

В іншому випадку, використовуючи stat bash4 + та GNU:

#!/bin/bash

set -e

shopt -s nullglob globstar

for from in /unencrypted/**/*; do
    to="${from/\/un//}"
    if [[ -d "$from" ]]; then
        echo mkdir -p "$to"
        echo chmod "$(stat -c %a "$from")" "$to"
        echo chown "$(stat -c %u:%g "$from")" "$to"
    else
        echo cp -a "$from" "$to" && echo rm "$from"
    fi
done

echo rm -r /unencrypted

Щоб запустити його по-справжньому, видаліть echoз кожної команди.


Я люблю ідею rsync! Мабуть, файли дійсно видаляються під час їх переміщення: superuser.com/questions/405761
Nicolas Raoul

@NicolasRaoul Якщо я пам'ятаю правильно, видалення буферизовано, але це близько до копії / видалення "один на один".
Кріс Даун

Шматки для мене добре, якщо кожен вагу важить менше 50 Гб.
Ніколя Рауль

Вам також не потрібно буде видаляти --dry-runз командного рядка rsync?
CVn

1
@meduz vнеобов'язковий і просто друкує назви файлів, коли вони передаються. aHAXПотрібно зберігати всі можливі атрибути файлів - aце архів, HAXце "зберігати жорсткі посилання, ACL та розширені атрибути".
Кріс Даун
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.