Score:0

ลินุกซ์ | คัดลอกเฉพาะไฟล์ใหม่ 100 อันดับแรกในไดเร็กทอรีและไดเร็กทอรีที่ซ้อนกัน

ธง us

ฉันมีพื้นที่เก็บข้อมูลด้านล่างบน AzureVM/Ubuntu

-/อ
   -/B --> 10,000 ไฟล์บันทึก
   -/C --> 100,000 ไฟล์บันทึก 
      -/D --> 200,000 ภาพ 
   สรุป.xml
   -/data --> ไฟล์ csv 1,000 ไฟล์

ตอนนี้เนื่องจากขนาดข้อมูลใหญ่มากในการคำนวณและดำเนินการใดๆ ที่นั่น ฉันต้องการนำตัวอย่างข้อมูลนี้ไปพัฒนาโค้ดการวิเคราะห์ข้อมูลของฉัน

ฉันต้องการคัดลอกเซ็ตย่อยไปยังตำแหน่งอื่นซึ่งมีไฟล์ใหม่ล่าสุด 100 ไฟล์ในแต่ละไดเร็กทอรีและไดเร็กทอรีที่ซ้อนกันและไฟล์ทั้งหมดบนรูทบางอย่างเช่นนี้

-/New_Location
   -/B --> 100 ไฟล์บันทึก
   -/C --> 100 ไฟล์บันทึก 
       -/D --> 100 ภาพ 
   สรุป.xml
   -/data --> ไฟล์ csv 100 ไฟล์

ฉันลองใช้คำสั่งหลายคำสั่งตาม cp แต่ไม่มีอะไรทำงานสำหรับฉันและใช้เวลาในการดำเนินการมากเกินไป

มีคนช่วยฉันที่นี่ได้ไหม

David avatar
cn flag
คำสั่งอะไร? มาดูกันว่าสิ่งที่คุณได้ลอง ใครจะช่วยคุณได้อย่างไรถ้าคุณไม่ให้ข้อมูล
Bamboocoder avatar
us flag
สิ่งหนึ่งที่ฉันพยายาม ไปที่แต่ละโฟลเดอร์แล้วรันคำสั่งนี้ cp -R -- *([1,100]) ../New แต่มันไม่ได้คัดลอกข้อมูลโฟลเดอร์ที่ซ้อนกันทั้งหมด แถมยังทำงานด้วยตนเองมากเกินไปด้วย เพราะฉันมีเป็นพันๆ ของโฟลเดอร์ในหนึ่งเดียว
David avatar
cn flag
ข้อมูลเพิ่มเติมในคำถามโปรดอย่าแสดงความคิดเห็น คุณพูดอย่างใดอย่างหนึ่ง ที่เหลือคืออะไร
Score:0
ธง cn

ซึ่งสามารถทำได้โดยการเลือกเก็บถาวร คุณสามารถทาร์บอลไฟล์ (เฉพาะไฟล์ที่ต้องการ) แล้วแยกไฟล์ทาร์บอลไปที่อื่น ฉันสันนิษฐานว่าไฟล์บันทึกของคุณมีชื่อเดียวกันยกเว้นหมายเลข (เช่น log1, log2 เป็นต้น) ดังนั้น ร้อยไฟล์แรกสามารถกำหนดในคำสั่ง tarball เป็น log{1..100} ตัวอย่างเช่น:

tar -cvf copy.tar <path1>/log{1..100} <path2>/log({1..100} เป็นต้น

เมื่อคุณแตกไฟล์ โครงสร้างไฟล์เดิมจะถูกสร้างขึ้นใหม่ในตำแหน่งใหม่ ดังนั้นคุณอาจต้องใช้ตัวเลือก "--strip-components=" เพื่อตัดทอนไดเร็กทอรีชั้นนำที่ซ้ำซ้อนเพื่อหลีกเลี่ยงความยุ่งเหยิง

Score:0
ธง cn

โดยปกติคุณสามารถแบ่งสิ่งนี้ออกเป็นสามงาน โดยเริ่มจากโครงสร้างไดเร็กทอรี และถัดไป อย่างในกรณีของคุณ จำกัดไฟล์ไว้ที่ 100 ไฟล์ ส่วนสุดท้ายจะกลับด้าน จับคู่ เพื่อกำหนดขอบเขตของไฟล์ที่เหลือ

#!/bin/bash  
  
#ตัวอย่างเริ่มต้น  
[[ ! -d A/ ]] && { \  
mkdir -p \  
A/{tmp/โฟลเดอร์\  
{A..Z}}/{ภาพ ข้อมูล} && \  
พิมพ์f %s\0 \  
A/{summary.xml,\  
tmp/De5Loh4X.tmp,\  
{A..Z}/{{1..1000}_file.log,\  
ภาพ/{1..1000}_pic.{jpg,png},\  
ข้อมูล/example.csv}} | xargs -0 สัมผัส; }  
### ตัวอย่าง END  
  
ตั้งค่า -o noglob  
  
ที่มา=อ  
เป้าหมาย = เป้าหมาย  
เบอร์=100  
# ลูกพรุน = "-เท็จ"  
prune="-type d -path $source/tmp -prune"  
จับคู่='-ชื่อ *.log -o -ชื่อ *.jpg -o -ชื่อ *.png'  
  
echo สร้างโครงสร้างไดเร็กทอรี  
ค้นหา "แหล่งที่มาของ $" \  
\( $prune -o -type d -links 2 \) -printf %P\0 | cpio -0 -pvdm -D "$แหล่งที่มา" "$เป้าหมาย"  
  
  
echo คัดลอก 100 ไฟล์  
ในขณะที่ IFS= อ่าน -rd ''; ทำ  
ค้นหา "$ตอบกลับ" \  
-maxความลึก 1 -type f \( $match \) -printf '%T@\t%P\0' | จัดเรียง -zk1rn | ตัด -zf2- | หัว -zn $number | cpio -0 -pvdm -D "$REPLY" "$target/${REPLY/#$source\//}"  
เสร็จแล้ว < <( \  
ค้นหา "แหล่งที่มาของ $" \  
\( $prune -false -o -type f \) -printf %h\0 | เรียงลำดับ -zu \  
)  
  
echo คัดลอกทุกอย่างอื่น  
ค้นหา "แหล่งที่มาของ $" \  
\( $พรุน ​​-false -o -type f ! \( $match \) \) -printf %P\0 | cpio -0 -pvdm -D "$แหล่งที่มา" "$เป้าหมาย"
bac0n avatar
cn flag
`-name *` จะจำกัดประเภทไฟล์ทั้งหมดไว้ที่ 100

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา