วิธีการบังคับให้เขียนทับไดเรกทอรีที่ไม่ว่างโดยใช้ `mv`


17

ฉันต้องการย้าย (ไม่ใช่เพียงแค่คัดลอก) กลุ่มของไฟล์ / ไดเรกทอรีไปยังไดเรกทอรีอื่นซึ่งบางส่วนมีชื่อที่ขัดแย้งกับไฟล์ / ไดเรกทอรีในไดเรกทอรีเป้าหมาย วัตถุประสงค์หลักของฉันคือการย้ายไฟล์ดังนั้นฉันสามารถทนต่อไดเรกทอรีที่ไม่ว่างที่ถูกเขียนทับ

ฉันกำลังใช้mv ... destinationอย่างไรก็ตามบางครั้งฉันได้รับ

mv: ไม่สามารถย้าย `target 'ไปยัง / destination / target': ไดเรกทอรีไม่ว่างเปล่า

ฉันพยายามmv -f ... destinationไม่ประสบความสำเร็จและเนื่องจากฉันต้องการให้ไฟล์หายไปจากตำแหน่งเดิมrsyncดูเหมือนจะไม่เหมาะสม

เป็นโบนัสมีวิธีแก้ไขปัญหาที่ดีสำหรับการรักษาไฟล์ที่ตั้งใจจะเขียนทับด้วยการเปลี่ยนชื่อหรือไม่?


และเกิดข้อผิดพลาดอะไรขึ้นเมื่อคุณลองใช้คำสั่ง mv?
suspectus

คุณพูดอย่างชัดเจนว่าrsyncไม่ใช่สิ่งที่คุณต้องการ คุณไม่แท็กนี้ทำไมมีrsync?
DopeGhoti

@DopeGhoti ฉันบอกว่ามันดูไม่เหมาะสม แต่ฉันยินดีที่จะแสดงเป็นอย่างอื่น
user1227038

@suspectus อัปเดตคำถาม
user1227038

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

0

คุณสามารถใช้mc(ผู้บัญชาการเที่ยงคืน) ภายในหน้าจอและโฟลเดอร์ด้วยInsและF6

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.