Cara memaksa menimpa direktori tidak kosong menggunakan `mv`

17

Saya ingin memindahkan (tidak hanya menyalin) sekelompok file / direktori ke direktori yang berbeda beberapa di antaranya memiliki bentrokan nama dengan file / direktori di direktori target. Tujuan utama saya adalah memindahkan file, jadi saya bisa mentolerir direktori yang tidak kosong ditimpa.

mv ... destinationNamun saat ini saya menggunakan , kadang-kadang saya dapatkan

mv: tidak dapat memindahkan `target 'ke / tujuan / target': Direktori tidak kosong

Saya mencoba mv -f ... destinationtanpa hasil dan karena saya ingin file-file tersebut hilang dari lokasi aslinya, rsyncsepertinya tidak sesuai.

Sebagai bonus, apakah ada solusi yang baik untuk menjaga file yang ingin ditimpa entah bagaimana mungkin dengan mengganti nama?

pengguna1227038
sumber
Dan kesalahan apa yang Anda dapatkan ketika Anda mencoba perintah mv Anda?
tersangka
Anda secara eksplisit mengatakan itu rsyncbukan yang Anda inginkan; mengapa Anda memberi tag ini dengan rsync?
DopeGhoti
@DopeGhoti Saya mengatakan itu sepertinya tidak sesuai, tetapi saya bersedia ditampilkan sebaliknya.
user1227038
@suspectus Pertanyaan yang diperbarui.
user1227038
1
jika Anda menggunakan use mv --backup=numberedatau salah satu opsi lain untuk --backupswitch, maka mvakan menyelesaikan penggabungan dan mempertahankan file yang dimaksudkan untuk ditimpa
bsd

Jawaban:

19

Jika Anda menggunakan mv --backup=numbered
(atau salah satu opsi lain untuk --backupsakelar),
maka mvakan menyelesaikan penggabungan dan mempertahankan file yang dimaksudkan untuk ditimpa.

bsd
sumber
jawaban bodoh - ini akan mencemari drive Anda dengan .~1~folder
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
DopeGhoti
sumber
1
Alih-alih skrip ini, seseorang dapat langsung menjalankan cpdiikuti oleh mvperintah.
reza.safiyat
0

Anda dapat menggunakan mc(Komandan Tengah Malam) di dalam layar dan folder dengan dengan InsdanF6

Toolkit
sumber