ที่บรรทัดรับคำสั่ง Linux ฉันต้องการคัดลอกชุดของ.txt
ไฟล์ที่มีขนาดใหญ่มากจากไดเรกทอรีหนึ่ง (และไดเรกทอรีย่อย) ไปยังอีกไดเรกทอรีหนึ่ง
ฉันต้องการโครงสร้างไดเรกทอรีเพื่อให้ยังคงเหมือนเดิมและฉันต้องการละเว้นไฟล์ยกเว้นไฟล์ที่ลงท้าย.txt
ด้วย
ที่บรรทัดรับคำสั่ง Linux ฉันต้องการคัดลอกชุดของ.txt
ไฟล์ที่มีขนาดใหญ่มากจากไดเรกทอรีหนึ่ง (และไดเรกทอรีย่อย) ไปยังอีกไดเรกทอรีหนึ่ง
ฉันต้องการโครงสร้างไดเรกทอรีเพื่อให้ยังคงเหมือนเดิมและฉันต้องการละเว้นไฟล์ยกเว้นไฟล์ที่ลงท้าย.txt
ด้วย
คำตอบ:
cd /source/path
find -type f -name \*.txt -exec install -D {} /dest/path/{} \;
.
find
นอกจากนี้ใน MacOS 10.13.1 นี้ทำงาน:find . -type f -name "*.txt" -exec install -v {} /dest/path/{} \;
อีกแนวทางหนึ่ง
find . -name '*.txt' -exec rsync -R {} path/to/dext \;
find . -iname '*.txt' -exec rsync -Rptgon {} path/to/dext \;
ในการจับคู่แบบตัวพิมพ์เล็กและตัวพิมพ์เล็กและเพื่อเป็นเจ้าของและสิทธิ์
วิธีที่ง่ายที่สุดสำหรับฉัน:
cp --parents -R jobs/**/*.xml ./backup/
หนึ่ง catch คือคุณต้องไปที่ไดเรคทอรี "ที่ต้องการ" ก่อนเพื่อให้ "พา ธ พาเรนต์" ถูกต้อง
ตรวจสอบให้แน่ใจด้วยว่าคุณเปิดใช้งาน globs ซ้ำในทุบตี:
shopt -s globstar
ก่อนอื่นคุณต้องคัดลอกมันด้วย
cp -r /old/folder /new/folder
จากนั้นไปที่โฟลเดอร์ใหม่และเรียกใช้
find . -type f ! -iname "*.txt" -delete
หรือเพียงแค่
cp -r /old/folder /new/folder && find . -type f ! -iname "*.txt" -delete
แก้ไข: ตกลงคุณต้องการหนึ่งคำสั่งที่ตัวกรอง (ฉันไม่ได้ทดสอบนี้เพราะระบบของฉันไม่มีcpio
คำสั่ง!) ที่นี่ฉันพบมัน: http://www.gnu.org/software/findutils/manual/html_mono/find.html#Copying-A-Subset-of-Files
find . -name "*.txt" -print0 |
cpio -pmd0 /dest-dir
โปรดทดสอบก่อนนี้เพราะฉันยังไม่ได้ลอง หากใครบางคนจะยืนยันว่าจะดี
0
ใน-pmd0
และเพิ่ม-print0
ในตอนท้ายของfind
คำสั่ง (ก่อนหน้า|
)
ฉันพยายามทำสิ่งเดียวกันบน macOS แต่ไม่มีตัวเลือกใดที่เหมาะกับฉันจริงๆ ditto
จนกว่าฉันจะค้นพบ
ฉันต้องคัดลอกไฟล์. wav จำนวนมากและข้ามไฟล์วิดีโอ ... ดังนั้นนี่คือสิ่งที่ฉันได้รับ:
find . -type f -iname "*.wav" -ls -exec ditto {} /destination/folder/{} \;
find .
- รัน find ในโฟลเดอร์ปัจจุบัน ให้แน่ใจว่าคุณcd /source/folder
ก่อนที่จะเริ่ม
-type f
- ระบุเพื่อค้นหาไฟล์เท่านั้น
-iname "*.wav"
- สิ่งนี้บอกให้มองหาตัวพิมพ์เล็กและใหญ่ * .wav-ls
- สิ่งนี้แสดงไฟล์ที่ใช้งานอยู่ อย่างอื่นมันแสดงว่าไม่มีอะไร-exec ditto {} /destination/folder/{} \;
- ทำสำเนาและสร้างไฟล์ด้วยไดเรคทอรีเดียวกันหรือไม่นำทางไปยังไดเรกทอรี:
find . -regex '<regexp_to_get_directories_and_files_you_want>' | xargs -i cp -r --parents {} path/to/destination
มันจะตรงไปตรงมาและทรงพลังยิ่งขึ้นหากคุณจัดการกับนิพจน์ทั่วไป
นำทางไปยังไดเรกทอรี:
cp '*.css' /path/to/destination
คุณจะต้องไปยังแต่ละโฟลเดอร์ในไดเรกทอรี แต่จะดีกว่าตัวเลือกส่วนใหญ่ที่ฉันเคยเห็น