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

17

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

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

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

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

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

user1227038
источник
И какую ошибку вы получаете, когда вы пробуете команду mv?
Подозреваемый
Вы прямо говорите, что rsyncэто не то, что вы хотите; почему вы пометили это rsync?
DopeGhoti
@ DopeGhoti Я сказал, что это неуместно, но я хочу показать иначе.
user1227038
@suspectus Обновленный вопрос.
user1227038
1
если вы используете use mv --backup=numberedили одну из других опций для --backupкоммутатора, то mvзавершите объединение и сохраните файлы, предназначенные для перезаписи
bsd

Ответы:

19

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

BSD
источник
тупой ответ - это будет загрязнять ваш диск с .~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
DopeGhoti
источник
1
Вместо этого сценария можно напрямую запустить cpследующую mvкоманду.
reza.safiyat
0

Вы можете использовать mc(Midnight Commander) внутри экрана и папки с помощью InsиF6

Инструментарий
источник