ที่บรรทัดรับคำสั่ง 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
คุณจะต้องไปยังแต่ละโฟลเดอร์ในไดเรกทอรี แต่จะดีกว่าตัวเลือกส่วนใหญ่ที่ฉันเคยเห็น