นี่เป็นวิธีหนึ่ง:
$ สำหรับไฟล์ใน 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
จึงทำให้คำสั่งสามารถทำงานกับชื่อไฟล์ที่ขึ้นต้นด้วย -
.