ฉันมีไดเรกทอรีที่มีไฟล์ PDF จำนวนมากบางไฟล์อยู่ในไดเรกทอรีย่อย (ซึ่งสามารถขยายได้หลายชั้นลึก) ผมอยากจะย้ายไฟล์ทั้งหมดที่ตรงกับเป็นเอาท์พุทเดียวโฟลเดอร์ชื่อ*.pdf
papers
ฉันจะทำสิ่งนี้ได้อย่างไร
ฉันมีไดเรกทอรีที่มีไฟล์ PDF จำนวนมากบางไฟล์อยู่ในไดเรกทอรีย่อย (ซึ่งสามารถขยายได้หลายชั้นลึก) ผมอยากจะย้ายไฟล์ทั้งหมดที่ตรงกับเป็นเอาท์พุทเดียวโฟลเดอร์ชื่อ*.pdf
papers
ฉันจะทำสิ่งนี้ได้อย่างไร
คำตอบ:
หากคุณใช้bash
ในเวอร์ชันล่าสุดคุณสามารถทำกำไรจากglobstar
ตัวเลือก:
shopt -s globstar
mv **/*.pdf papers/
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
"{}"
เพื่อจัดการกับชื่อไฟล์ที่มีช่องว่างหรือไม่?
find -print0 /directory/with/pdfs -iname "*.pdf" | xargs -0 mv -t /papers
(คล้ายกับคำตอบอื่น แต่ฉันชอบ pipe / xargs / mv ... ง่ายกว่าสำหรับฉัน)
FYI ฉันทำสคริปต์บรรทัดเดียวด้านบนสำเร็จในหลายไดเรกทอรีและไฟล์ PDF หลายไฟล์
-print0
ให้กับการค้นหาของคุณและ-0
เพื่อ xargs
หากคุณค้นหาเพียงไดเรกทอรีเดียวคุณสามารถทำได้:
mkdir <destination>
mv */*.pdf <destination>
ซึ่ง<destination>
หมายถึงบางไดเรกทอรี mv
จะไม่สร้างไดเรกทอรีให้คุณโดยอัตโนมัติ
a/x.pdf
และb/x.pdf
?