ใช้เทอร์มินัล Linux / Unix เพื่อคัดลอกไฟล์จำนวนมากไปยังตำแหน่งใหม่


1

ฉันกำลังพยายามใช้เทอร์มินัล Linux เพื่อคัดลอกไฟล์จำนวนมากไปยังตำแหน่งใหม่ ฉันเบื่อคำสั่ง:

sudo หา -i file_I_want | xargs cp $ 1 / place_I_want_everything_copied_to /

ซึ่งทำให้เกิดข้อผิดพลาด วิธีที่ถูกต้องในการจัดการกับสิ่งนี้คืออะไร?


พวกเขาทั้งหมดมีชื่อคล้ายกันเช่น file001.jpg file002.jpg file003.jpe หรือไม่ มิฉะนั้นcpควรทำสิ่งที่คุณต้องการด้วยcp -r /a/folder
jwbensley

ข้อผิดพลาดที่แน่นอนคืออะไร?
Zoredache

@javano ใช่ทุกคนมีชื่อไฟล์ที่คล้ายกันและพวกเขาทั้งหมดในโฟลเดอร์ที่แตกต่างกันทั่วทั้งระบบ
ระหว่าง

@Zoredache /somedir/.../file.jpg ไม่ใช่ไดเรกทอรี (แน่นอน) แต่ถ้าฉันเสียบพา ธ ของไฟล์ลงในคำสั่ง cp (ตรงที่ $ 1 อยู่) เหมือนกับที่ฉันติดตั้งไว้ตรงนั้นมันก็ใช้ได้ หาก xargs ทำงานเหมือนที่ฉันคิดว่ามันเป็นเช่นนั้นฉันไม่เห็นสิ่งที่ฉันทำผิด ทุกสิ่งที่ฉันอ่านบน xargs ทำให้ฉันคิดว่าฉันมีสิ่งที่ถูกต้อง เห็นได้ชัดว่ามันไม่ใช่
ระหว่าง

3
cp $ (หา -i * .jpg) / ปลายทาง / โฟลเดอร์
jwbensley

คำตอบ:


1

xargsไม่ทำงานอย่างนั้น มันไม่ได้ใช้ $ 1 ปกติแล้วมันจะเลื่อนอาร์กิวเมนต์ไปที่ท้ายรายการ param แต่ในกรณีนี้มันใช้งานไม่ได้เนื่องจากเป็นเป้าหมายไม่ใช่ปลายทางและพารามิเตอร์ต่อท้ายไม่จำเป็นต้องใช้

ตรวจสอบการ-iตั้งค่าสถานะเพื่อ xargs จะช่วยให้คุณมีการทดแทน ค่าเริ่มต้นคือการใช้ {} ฉันเดาว่าจะสอดคล้องกับfind

sudo locate -i *file_I_want* | xargs -i cp {} /place_I_want_everything_copied_to/

ความคิดเห็นของ @javano เป็นคำตอบเช่นกัน แต่จะแตกถ้ามีช่องว่างในชื่อไฟล์ (แต่ฉันเชื่อว่าช่องว่างจะแบ่งการใช้ xargs ด้านบนด้วย)

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