ฉันมีชุดของไฟล์ทั้งหมดที่ลงท้ายด้วยสตริงเดียวกันเช่น: *_ext.dat
ตั้งอยู่ในหลาย sub-dirs พร้อมกับไฟล์อื่น ๆ หลายใน dir หลักที่กำหนด นี่คือโครงสร้าง:
/main_dir/subdir1/file11_ext.dat
/main_dir/subdir1/file12_ext.dat
/main_dir/subdir1/file13_ext.dat
/main_dir/subdir1/file14_other.dat
/main_dir/subdir1/file15_other.dat
/main_dir/subdir2/file21_ext.dat
/main_dir/subdir2/file22_ext.dat
/main_dir/subdir2/file23_ext.dat
/main_dir/subdir2/file24_other.dat
/main_dir/subdir2/file25_other.dat
/main_dir/subdir3/file31_ext.dat
/main_dir/subdir3/file32_ext.dat
/main_dir/subdir3/file33_ext.dat
/main_dir/subdir3/file34_other.dat
/main_dir/subdir3/file35_other.dat
ฉันต้องการที่จะย้ายซ้ำเฉพาะไฟล์ที่ลงท้าย*_ext.dat
เป็นผบหลักใหม่new_dir
เคารพโครงสร้างย่อย dir เพื่อให้ไฟล์ที่จะสิ้นสุดในโครงสร้าง dir เทียบเท่าเช่นนี้
/new_dir/subdir1/file11_ext.dat
/new_dir/subdir1/file12_ext.dat
/new_dir/subdir1/file13_ext.dat
/new_dir/subdir2/file21_ext.dat
/new_dir/subdir2/file22_ext.dat
/new_dir/subdir2/file23_ext.dat
/new_dir/subdir3/file31_ext.dat
/new_dir/subdir3/file32_ext.dat
/new_dir/subdir3/file33_ext.dat
ด้วยเหตุนี้คำสั่งควรสร้าง dir ย่อยเหล่านั้นด้วยชื่อที่เกี่ยวข้อง ฉันรู้ว่ามีบรรทัดเช่นนี้:
find . -name "*_ext.dat" -print0 | xargs -0 rm -rf
ฉันสามารถลบไฟล์เหล่านั้นทั้งหมด แต่ฉันไม่รู้วิธีแก้ไขเพื่อทำสิ่งที่ฉันต้องการ (หรือถ้าเป็นไปได้)
rsync --include=*_ext.dat /main_dir/ /new_dir/
จะทำเคล็ดลับ ยังไม่ได้ทดสอบ