ฉันจะคัดลอกไฟล์ pdf ทั้งหมดซ้ำในไดเรกทอรี (และเป็นไดเรกทอรีย่อย) ไปยังไดเรกทอรีออกเดียวได้อย่างไร


20

ฉันมีไดเรกทอรีที่มีไฟล์ PDF จำนวนมากบางไฟล์อยู่ในไดเรกทอรีย่อย (ซึ่งสามารถขยายได้หลายชั้นลึก) ผมอยากจะย้ายไฟล์ทั้งหมดที่ตรงกับเป็นเอาท์พุทเดียวโฟลเดอร์ชื่อ*.pdfpapers

ฉันจะทำสิ่งนี้ได้อย่างไร


1
คุณต้องการจัดการกับเคสอย่างไรมีสองไฟล์a/x.pdfและb/x.pdf?
พันเอก Panic

คำตอบ:



30
  find /bunchopdfs -name "*.pdf" -exec mv {} /papers \;    

นี่คือการทดสอบของฉัน

$ ls -R
.:
a  aaa bbb.pdf  pdfs

./a:
foo.pdf

./pdfs:

สังเกตเห็นไฟล์ "aaa bbb.pdf"

$ find . -name "*pdf" -exec mv {} pdfs \;
$ ls -R
.:
a  pdfs

./a:

./pdfs:
aaa bbb.pdf  foo.pdf

สวย! +1!
PenguinCoder

คุณไม่จำเป็นต้องพูด"{}"เพื่อจัดการกับชื่อไฟล์ที่มีช่องว่างหรือไม่?
terdon

@terdon: ที่จริงแล้วไม่มีคุณทำไม่ได้ (ถึงแม้ว่าปัญหาแบบนั้นจะทำให้ฉันผิดหวัง) ดูคำตอบที่อัปเดต
RedGrittyBrick

4
find -print0 /directory/with/pdfs -iname "*.pdf" | xargs -0 mv -t /papers

(คล้ายกับคำตอบอื่น แต่ฉันชอบ pipe / xargs / mv ... ง่ายกว่าสำหรับฉัน)

FYI ฉันทำสคริปต์บรรทัดเดียวด้านบนสำเร็จในหลายไดเรกทอรีและไฟล์ PDF หลายไฟล์


1
xargs มีปัญหา "ช่องว่างในชื่อไฟล์" ที่ -exec ไม่มี คุณสามารถไกล่เกลี่ยสิ่งนี้ได้บ้างโดยเพิ่ม args -print0ให้กับการค้นหาของคุณและ-0เพื่อ xargs
Rich Homolka

@RichHomolka ดูคำตอบที่เปลี่ยนไป (. ขอบคุณสำหรับเคล็ดลับที่เป็นประโยชน์จริงๆ!)
เทรเวอร์บอยด์สมิ ธ

คุณเคยลองไหม ดูเหมือนว่าคุณจะต้องเพิ่ม "-print0" ที่ส่วนท้ายของคำสั่ง
find

0

สำหรับบรรทัดคำสั่ง Windows (cmd.exe) คุณสามารถใช้:

for /F "usebackq delims==" %j IN (`dir /s /b *.pdf`) do copy "%j" c:\target_dir

1
สวัสดีและยินดีต้อนรับสู่ SU ขอบคุณสำหรับคำตอบของคุณ แต่คำถามนั้นขอให้ใช้โซลูชันลินุกซ์โดยเฉพาะ
terdon

2
มันก็ยังมหัศจรรย์ที่หน้าต่างสามารถทำเช่นนั้นได้!
Vorac

0

หากคุณค้นหาเพียงไดเรกทอรีเดียวคุณสามารถทำได้:

mkdir <destination>
mv */*.pdf <destination>

ซึ่ง<destination>หมายถึงบางไดเรกทอรี mvจะไม่สร้างไดเรกทอรีให้คุณโดยอัตโนมัติ

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