Як змусити перезаписати непорожні каталоги за допомогою `mv`


17

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

Я зараз використовую, mv ... destinationоднак, час від часу отримую

mv: неможливо перемістити `target 'до / target / target': Каталог не порожній

Я намагався mv -f ... destinationбез успіху, і оскільки я хочу, щоб файли пішли з оригінального місця, rsyncздається , це не підходить.

Як бонус, чи є хороше рішення для збереження файлів, призначених для перезапису якось, можливо, шляхом перейменування?


І яку помилку ви отримуєте при спробі команди mv?
підозрюваний

Ви прямо говорите, що rsyncце не те, чого ви хочете; чому ти це позначив rsync?
DopeGhoti

@DopeGhoti Я сказав, що це не здається доречним, але я бажаю, щоб мене показали інакше.
користувач1227038

@suspectus Оновлено питання.
користувач1227038

1
якщо ви використовуєте використання mv --backup=numberedабо інший варіант --backupперемикача, то mvзавершіть об'єднання та збережіть файли, призначені для перезапис
bsd

Відповіді:


19

Якщо ви користуєтесь mv --backup=numbered
(або одним із інших варіантів для --backupперемикання),
то mvзавершите об'єднання та збережіть файли, призначені для перезапису.


тупа відповідь - це забруднить ваш привід .~1~папками
Toolkit

0
#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
SRC=/path/to/source
DST=/path/to/destination

for item in $SRC/*; do
    if [[ -f "$DST/$(basename "$item")" ]]; then
        newitem=$(basename $item)_old
        while [[ -f "$DST/$newitem" ]]; do
            newitem=${newitem}_old
        done
        mv "$DST/$(basename $item)" "$DST/$newitem"
    fi
    mv "$item" "$DST/$(basename $item)"
done

1
Замість цього сценарію можна було безпосередньо запустити cpнаступну mvкоманду.
reza.safiyat

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.