นี่เป็นวิธีหนึ่ง:
$ สำหรับไฟล์ใน folder_1/*.jpg; ทำ
fileName="${file##*/}"
[[ -e folder_2/${fileName/.txt/.jpg} ]] || echo rm -- "ไฟล์ $"
เสร็จแล้ว
rm -- folder_1/03.txt
rm -- folder_1/04.txt
เดอะ สำหรับ วนซ้ำไฟล์และไดเร็กทอรีที่ไม่ได้ซ่อนทั้งหมด โฟลเดอร์_1 ซึ่งลงท้ายด้วยชื่อ .jpg,บันทึกเป็น $ไฟล์. ถัดไป, fileName="${file##*/}" ตั้งค่าตัวแปร $ชื่อไฟล์ ถึงมูลค่าของ $ไฟล์ กับทุกสิ่งจนวาระสุดท้าย / ลบออก ซึ่งหมายความว่าจะเป็นชื่อไฟล์โดยไม่มีไดเร็กทอรี สุดท้ายกับ [[ -e folder_2/${fileName/.txt/.jpg} ]] || echo rm -- $ไฟล์เราตรวจสอบว่ามีไฟล์อยู่หรือไม่ โฟลเดอร์_2 ที่มีชื่อเดียวกันแต่ก .txt นามสกุล และถ้าไม่ echo rm -- "ไฟล์ $". หากเป็นไปตามที่คุณต้องการ ให้ลบไฟล์ เสียงสะท้อน และเรียกใช้อีกครั้งเพื่อลบไฟล์จริง:
สำหรับไฟล์ใน folder_1/*.jpg; ทำ
fileName="${file##*/}"
[[ -e folder_2/${fileName/.txt/.jpg} ]] || rm -- "$ ไฟล์"
เสร็จแล้ว
เดอะ -- ใน rm -- "$ ไฟล์" ไม่จำเป็นที่นี่แต่เป็นนิสัยที่ดีที่ควรมี: มันทำให้แน่ใจว่าทุกอย่างหลังจากนั้น -- ไม่ได้แยกวิเคราะห์เป็นตัวเลือก rmจึงทำให้คำสั่งสามารถทำงานกับชื่อไฟล์ที่ขึ้นต้นด้วย -.