ลบไฟล์ที่มีชื่อเดียวกันออกจากโฟลเดอร์ย่อย


0

จากรูปแบบต่อไปนี้ฉันจะลบไฟล์ในโฟลเดอร์ Attic ที่มีไฟล์ที่เกี่ยวข้องในโฟลเดอร์หลักได้อย่างไร (ไฟล์จะมีชื่อเหมือนกันโดยไม่จำเป็นต้องมีเนื้อหาเหมือนกัน)

/folder1
    /Attic
        fileA.txt,v  (problem file)
    fileA.txt,v
    fileB.txt,v
    FileC.txt,v
/folder2
    /Attic
        fileD.txt,v  (another problem file)
        fileX.txt,v  (NOT a problem file)
    fileD.txt,v
    fileE.txt,v
    FileF.txt,v

พื้นหลัง: ฉันกำลังพยายามล้างที่เก็บ CVS สำหรับการย้ายไปยังคอมไพล์ CVS สร้างโฟลเดอร์ 'Attic' สำหรับไฟล์ที่ถูกลบ ในช่วง 10 ปีที่ผ่านมามีบางสิ่งที่ไม่ดีเกิดขึ้นซึ่งหมายความว่ามีบางไฟล์ที่มีชื่อเดียวกันอยู่ในโฟลเดอร์ทั้งที่ยังมีชีวิตอยู่และที่ตายแล้ว ฉันตระหนักถึงความเสี่ยงและผลกระทบ ฉันสำรองข้อมูลของฉันแล้วและฉันกำลังทำสำเนาอยู่


ฉันคาดว่า cvs-fast-export เพื่อจัดการกับสถานการณ์เช่นนี้อย่างเหมาะสม (ไม่ว่าจะไม่บ่อยนัก) - คุณแน่ใจหรือไม่ว่าจะไม่ย้ายที่เก็บอย่างถูกต้องจริง ๆ ?
grawity

ฉันจะต้องตรวจสอบ ฉันใช้ cvs2git ไม่ใช่ที่บ้านในเทอร์มินัลยูนิกซ์ ดูเหมือนจะไม่มีตัวเลือกในการทิ้งไฟล์ Attic ที่ขัดแย้งกัน
Denham Coote

ลอง cvs-fast-export จากนั้น ดูesr.ibiblio.org/?p=5190และesr.ibiblio.org/?p=4745เช่นกัน
grawity

ไม่ได้รับโอกาสที่จะดูที่ลิงค์ทั้งสองข้างต้น - กฎไฟร์วอลล์ในที่ทำงานไม่ชอบกระดานข้อความ / ฟอรัมบางประเภท แม้ว่าสคริปต์ของคุณจะใช้กลอุบายและตอนนี้ฉันมีการอ้างอิงถึงการทำงานหากใบหน้าที่มีปัญหา (การจัดการไฟล์) ที่คล้ายกันในอนาคต
Denham Coote

คำตอบ:


2

ในทุบตี:

shopt -s globstar;
for file in ./**/Attic/*; do
    if [[ -e ${file%/*/*}/${file##*/} ]]; then
        rm -vf "$file";
    fi;
done;

ด้วยการเปิดใช้งานglobstar จะ**จับคู่ไฟล์แบบเรียกซ้ำ (โดยไม่คำนึงถึงความลึก) ${var#text}และ${var%text}อนุญาตให้ลบคำนำหน้าหรือคำต่อท้ายของตัวแปรดังนั้น${file%/*/*}ผลลัพธ์ในชื่อไดเรกทอรี (ลบ "/ Attic / ... ") ในขณะที่${file##*/}เป็นชื่อไฟล์ฐาน

คุณควรพิจารณาเครื่องมือเช่นcvs-fast-exportและreposurgeon; ฉันคาดหวังให้พวกเขาจัดการกับสถานการณ์เช่นนี้ได้อย่างถูกต้องตั้งแต่ต้น ถ้าไม่อย่างน้อยก็ให้แน่ใจว่าคุณมีcvs2git...


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