กำลังย้ายไปยังบัญชีผู้ใช้ใหม่: ต้อง chown ไฟล์ของบัญชีเก่า…ฉันคิดว่า


1

มีวิธีการเลือก chown ไฟล์ / โฟลเดอร์ที่เป็นของผู้ใช้โดยเฉพาะขณะที่ปล่อยไฟล์ / โฟลเดอร์อื่น ๆ ไว้หรือไม่? ฉันกำลังย้ายไปยังบัญชีผู้ใช้ใหม่ในเครื่องของฉัน ฉันคัดลอกสิ่งที่ฉันต้องการจากโฮมไดเร็กตอรี่ของผู้ใช้เก่าและทำเครื่องหมายมันซ้ำแล้วซ้ำอีกตามที่อธิบายไว้ หน้าสนับสนุนของ Apple . หน้าสนับสนุนไม่เอ่ยถึงการ chowning ไฟล์ / โฟลเดอร์ที่อื่น ๆ บนเครื่อง แต่ฉันได้พบสิ่งมากมายในสถานที่อื่น ๆ ที่เป็นของผู้ใช้เก่า:

  • / การประยุกต์ใช้งาน (สิ่งต่าง ๆ มากมาย)
  • /ห้องสมุด (สิ่งต่าง ๆ มากมาย)
  • / เอกชน var / tmp / (น้อยมาก)
  • / เอกชน / var / เมล์ / app_profile / (2 ไฟล์)
  • / usr / local / ClamXav / (1 ไฟล์ที่ถอดเปลี่ยนได้อย่างง่ายดาย)
  • / usr / local / lib / ตัวแปลงสัญญาณ / (4 ไฟล์ / โฟลเดอร์)

ฉันวางแผนที่จะลบผู้ใช้เก่าเมื่อฉันมั่นใจว่าทุกอย่างใช้งานได้และฉันไม่แน่ใจว่าจะเกิดอะไรขึ้นหากผู้ใช้ที่ถูกลบบางไฟล์มีความสำคัญ ผู้ใช้เก่าเป็นบัญชีผู้ดูแลระบบถ้าเป็นเช่นนั้น โอ้และฉันใช้ OSX 10.4.11 บน PPC mac ถ้าเป็นเช่นนั้น

ความช่วยเหลือใด ๆ ชื่นชม :)

คำตอบ:


1

คุณสามารถตรวจสอบและกำหนดความเป็นเจ้าของซ้ำกับแผนผังไดเรกทอรีด้วยซ้ำได้ find, stat และ chown.

#!/bin/bash

olduser=<oldusername> # replace this with your old username
newuser=<newusername> # replace this with your new username
dir=<dir> # replace this with the directory you want to run through

find $dir | while read filename
do
  owner=$(stat "$filename" | cut -d ' ' -f 5)
  if [ $owner == $olduser ]
  then
    chown $newuser $filename
  fi
done

ความสำคัญของอะไร $ ในทุบตี?
ivan

มันเป็นวิธีที่คุณอ้างถึงตัวแปรที่คุณกำหนด โดยการตั้งค่า dir='/Applications'ตัวอย่างเช่นการใช้งานในอนาคตของ $dir จะถูกแทนที่อย่างมีประสิทธิภาพด้วย '/Applications'. นอกจากนี้ในตัวอย่างของ $() ส่วนมันเป็นวิธีในการทุบตีการกระทำราวกับว่าการส่งออกของคำสั่งเฉพาะหรือคำสั่งถูกพิมพ์ในสถานที่ ตัวอย่างเช่น man $(echo 'grep') เทียบเท่ากับ man grep, เพราะ echo 'grep' ผลตอบแทน grep.
colons

3
ไม่ต้องการ statเพียงใช้ find โดยตรง: find $dir -user $olduser -exec chown $newuser '{}' \;
nohillside

โอ ฉันไม่รู้ find อาจถูกกรองเช่นนั้น เรียบร้อย
colons

@ patrix- ฉันคิดว่าฉันเข้าใจโค้ดข้างต้นยกเว้น \ . หากฉันเข้าใจถูกต้องก็จะค้นหาไฟล์ใน $dir ที่ตรงกับสองเงื่อนไข: 1) เป็นเจ้าของโดย $olduser และ 2) ส่งคืนสถานะการออกค่าศูนย์เมื่อ chown $newuser ทำงานกับพวกเขา ฉันเดาว่ามันเริ่มต้นด้วยเงื่อนไขแรกและถ้าตรงกับเงื่อนไขนั้นก็จะทำงาน chown $newuser บนไฟล์เพื่อประเมินเงื่อนไขที่สอง ดังนั้นหากเงื่อนไขแรกล้มเหลว (ไฟล์ของ ไม่ ที่เป็นเจ้าของโดย $olduser ) find ย้ายโดยไม่ต้อง chowning ไฟล์นั้น วิธีการวางท่อที่ฉลาด ถูกต้องหรือไม่ และขอขอบคุณสำหรับความช่วยเหลือ!
ivan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.