จัดเรียงไฟล์ตามวันที่และคัดลอกไฟล์ไปยังโฟลเดอร์ใหม่


1

ฉันสงสัยว่าสิ่งใดจะเป็นวิธีที่รัดกุมที่สุดในการจัดเรียงไฟล์ตามวันที่แล้วคัดลอกไฟล์ไปยังโฟลเดอร์ใหม่

ปัญหาของฉัน: ฉันมีไฟล์ที่ถูกเปลี่ยนชื่ออย่างที่เรียก

file1 (101)
file2 (103)
file3 (110)
.
.
.

โดยที่การกำหนดหมายเลขไม่ได้บ่งบอกถึงความแตกต่างของไฟล์ภายใน สิ่งเดียวที่แตกต่างกันอย่างแท้จริงระหว่างสองประเภทไฟล์ที่ฉันต้องการเรียงลำดับคือวันที่สร้างสำรองของพวกเขาดังนั้นฉันค่อนข้างจะซับซ้อนกว่าข้อความชี้แจงปัญหา


1
ในการจัดเรียงไฟล์ตามวันที่คุณสามารถใช้ ls -t "-t เรียงตามเวลาแก้ไขใหม่ล่าสุดก่อน" . คุณหมายถึงอะไรกับ "คัดลอกกัน"? PS & gt; อย่าแยกเอาต์พุตของ ls คุณสามารถเกิดขึ้นได้ ปัญหาที่เกิดขึ้น .
Hastur

ขอบคุณสำหรับสิ่งนั้น! หลังจากเรียงลำดับแล้วฉันต้องการคัดลอกไฟล์อื่นทุกไฟล์ไปยังโฟลเดอร์ใหม่ซึ่งหมายความว่าฉันใช้ไฟล์แรกคัดลอกข้ามไฟล์ที่สองใช้อันที่สามคัดลอกข้ามที่สี่เป็นต้น
lhcgeneva

คุณเคยคิดไหมว่าหากมีคน (คนหรือโปรแกรม) แตะ (หรือเพิ่ม) ไฟล์คุณจะได้รับความสับสน ... :-) แม้ว่าคุณจะสร้าง (d) หรือคัดลอกไฟล์เหล่านั้นอย่างรวดเร็วพวกเขาก็สามารถแก้ไขได้ (= ปิด) ในแบบอะซิงโครนัสหรือไม่ ... [คิดว่าแปลกเพราะมันเกิดขึ้นอย่างน่าเศร้าในแต่ละวัน]
Hastur

: D จุดดี! ตอนแรกมีการตั้งชื่อไฟล์อย่างถูกต้องเพื่อให้ฉันสามารถแยกความแตกต่างของ 'คลาส' สองไฟล์ตามชื่อ จากนั้นฉันเปลี่ยนชื่อแบทช์บน windows เพราะฉันคิดว่ามันจะทำงานคล้ายกับเครื่องมือค้นหาของ MacOs ไม่ใช่ความคิดที่ดีเพราะมันสร้างไฟล์ 1600 ชื่อที่มีชื่อเหมือนกัน แต่เพิ่มเฉพาะเลขท้ายที่สุดเท่านั้น สิ่งเดียวที่ฉันรู้ก็คือไฟล์ทั้งสองคลาสนั้นถูกสร้างขึ้นสลับกัน
lhcgeneva

เริ่มใหม่จากไฟล์ต้นฉบับหากทำได้ คุณสามารถทำการทดสอบบางอย่างได้ แต่คุณไม่สามารถทำงานได้อย่างจริงจังหากคุณไม่แน่ใจ 100% เกี่ยวกับข้อมูล คุณจะได้ผลลัพธ์แบบไหน โปรดทราบว่าเมื่อคุณดำเนินการต่อ สูญเสีย อาศัยความมั่นใจว่าความล้มเหลวครั้งใหญ่จะเตือนคุณหากมีบางอย่างไม่ถูกต้อง ... Murphy's_law จะแสดง. หากไฟล์เหล่านั้นแตกต่างกัน (ตรวจสอบด้วย file file1 file2 ) คุณสามารถพึ่งพาได้อีกเล็กน้อย คุณสามารถลบล้างข้อสงสัยด้วย md5sum บนสำเนาต้นฉบับและในพื้นที่ ...
Hastur

คำตอบ:


1

สคริปต์ต่อไปนี้ดูเหมือนจะเป็นสคริปต์ที่ดี แต่จะใช้ได้เฉพาะในกรณีที่คุณมี "ประพฤติดี" ชื่อไฟล์ [ 1 ] :

#!/bin/bash
foo=0
for f in $(ls -rt) ; do 
  if [ $((foo%2)) -eq 0 ];
    then
       echo "even " "$f";  // maybe here copy
    else
       echo "odd" "$f" ;   // maybe here skip
  fi
  let foo++
done

ดังนั้นจึงไม่มีการขึ้นบรรทัดใหม่ไม่มีแท็บ ไม่มีช่องว่าง ... ตามที่ปรากฏในกรณีของคุณ
โปรดจำไว้ว่าไม่ปลอดภัยที่จะแยกวิเคราะห์ผลลัพธ์ของ ls [ 1 ] และตรวจสอบสองครั้งเสมอ

หากคุณไม่ได้อยู่ในพื้นที่ปลอดภัยที่คุณสามารถใช้ ls ได้คุณอาจพิจารณาหาวิธีแก้ปัญหาด้วย findอาจได้แรงบันดาลใจจากคำตอบของ Gilles [ 2 ] .


PS & gt; ในกรณีที่ข้อมูลเสียหายแม้แต่ในกรณีที่เป็นของคุณก็จำเป็นต้องตรวจสอบว่าโปรแกรมแก้ไขทำงานได้เสมอ บ่อยครั้งจะสะดวกกว่าที่จะเริ่มต้นใหม่ตั้งแต่ต้น หากอย่างที่ฉันคิดว่าขนาดข้อมูลมีขนาดใหญ่มากและคุณไม่สามารถถ่ายโอน / ดาวน์โหลดอีกครั้งจะเป็นไปได้ที่จะตรวจสอบบางอย่าง (เช่น md5sum [ 3 ] ) กับข้อมูลต้นฉบับและข้อมูลที่ได้รับการติดตั้งแล้ว


นั่นเป็นสิ่งที่ฉันกำลังมองหา
lhcgeneva

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