Как заставить перезаписывать непустые каталоги с помощью `mv`


17

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

Я в настоящее время использую mv ... destinationоднако, иногда я получаю

mv: не может переместить `target 'в / destination / target': каталог не пуст

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

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


И какую ошибку вы получаете, когда вы пробуете команду mv?
Подозреваемый

Вы прямо говорите, что rsyncэто не то, что вы хотите; почему вы пометили это rsync?
DopeGhoti

@ DopeGhoti Я сказал, что это неуместно, но я хочу показать иначе.
user1227038

@suspectus Обновленный вопрос.
user1227038

1
если вы используете use mv --backup=numberedили одну из других опций для --backupкоммутатора, то mvзавершите объединение и сохраните файлы, предназначенные для перезаписи
bsd

Ответы:


19

Если вы используете mv --backup=numbered
(или один из других параметров для --backupкоммутатора),
то mvзавершите объединение и сохраните файлы, которые должны быть перезаписаны.


тупой ответ - это будет загрязнять ваш диск с .~1~папками
Инструментарий

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.