เปลี่ยนเจ้าของไฟล์ซ้ำ ๆ แต่ไม่ใช่ไดเรกทอรี


14

ฉันมีไดเรกทอรีที่มี ~ 50k ไดเรกทอรีและไฟล์ ~ 1m

ฉันต้องการเปลี่ยนเจ้าของ (หรือสิทธิ์) ของไฟล์ทั้งหมด แต่ไม่ใช่ไดเรกทอรี นี่เป็นเพราะฉันพยายาม SCP เพิ่มเติมไฟล์จากเซิร์ฟเวอร์ระยะไกล (ไดเรกทอรีประมาณ ~ 150k และ ~ 3.6m)

ไดเรกทอรีที่ฉันมีเป็นส่วนหนึ่งของไดเรกทอรีระยะไกล แต่ scp ล้มเหลว ...

ถ้าฉันเรียกใช้ SCP อีกครั้งมันจะเริ่มต้นใหม่ด้วยการเขียนทับไฟล์ที่ฉันคัดลอกมาจากไดเรกทอรีระยะไกล

คำตอบ:


20

คุณสามารถใช้findมันมีประโยชน์เพิ่มเติมที่ARG_MAXจะไม่ถูกเรียกในกระบวนการ จากไดเรกทอรีหลัก:

find . -type f -exec chown newowner {} +

สำหรับchmod:

find . -type f -exec chmod 644 {} +

-type fจะfindเป็นไฟล์เท่านั้น


1
ใช้งานได้ดีจริงๆ! ขอบคุณ! +1 สำหรับ chmod และ chown
Marcus Brunsten

2
ดังนั้นfindจะไม่เรียกARG_MAX? ฉันคิดเสมอว่ามันจะมี คุณมักจะเรียนรู้สิ่ง :)
คอส

5

xargsอีกทางเลือกหนึ่งคือการใช้งาน คุณจะต้องใช้-print0ตัวเลือกด้วยfindและ-0ตัวเลือกที่เกี่ยวข้องของxargs:

find . -type f -print0 | xargs -0 chown newuser:newgroup

จากman find:

-print0

พิมพ์ชื่อไฟล์เต็มรูปแบบในการออกมาตรฐานตามด้วยตัวอักษรโมฆะ นี้ช่วยให้ชื่อไฟล์ที่มีการขึ้นบรรทัดใหม่หรือชนิดอื่น ๆ ของพื้นที่สีขาวสามารถตีความได้อย่างถูกต้องโดยโปรแกรมที่ประมวลผลเอาต์พุตการค้นหา ตัวเลือกนี้สอดคล้องกับตัวเลือก -0 ของ xargs

xargsARG_MAXนอกจากนี้ยังจะจัดการอย่างถูกต้อง


2
find..execจัดการกับชื่อไฟล์แปลก ๆ .. อะไรที่ทำให้คุณคิดว่ามันไม่ได้?
heemayl

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