ป้องกัน mv จากการเขียนทับไฟล์ที่ใหญ่กว่าด้วยชื่อเดียวกัน


0

ฉันต้องการย้ายไฟล์ทั้งหมดจากไดเรกทอรีทิ้งโครงสร้างไดเรกทอรี

น่าเสียดายที่บางไฟล์มีชื่อไฟล์เหมือนกัน ฉันกำลังมองหา อย่างนี้:

find /tmp/dirtree -type f -exec mv -i {} . \;

ฉันจะป้องกันการเขียนทับไฟล์ขนาดใหญ่ในระหว่างกระบวนการได้อย่างไร?

คำตอบ:


2

สร้าง mymv.pl สคริปต์ Perl:

#!/usr/bin/perl
use File::Copy;
$file = shift;
($name = $file) =~ s#.*/##;
if (-f $name and -s $file < -s $name) {
     warn "$name not moved";
} else {
     move($file, $name);
}

จากนั้นเปลี่ยนสายเป็น

find /tmp/dirtree -type f -exec perl mymv.pl {} \;

วิธีแก้ปัญหาที่โง่ง่ายหมายถึง KISS! โปรดแก้ไขโพสต์ของคุณและเพิ่ม perl พารามิเตอร์หลัง -exec. ฉันมีปัญหาที่น่าสงสัยโดยปราศจากสิ่งนั้น ขอบคุณ.
mate64

@msec: อัปเดต
choroba

นี่อาจจะเพิ่มขึ้นถ้าคุณอธิบายสิ่งที่มันทำ อย่างน้อยก็จากฉัน ในคำถามของ OP ดูเหมือนว่าเขากำลังย้ายไฟล์ไปยังไดเรกทอรีปัจจุบัน "." แต่ฉันไม่สามารถบอกได้ว่าคุณกำลังเคลื่อนไหวอยู่ที่ไหน
Buttle Butkus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.