นอกเหนือจากความจริงที่ว่า
สำหรับไฟล์ใน $forall
จะดำเนินการวนซ้ำเพียงครั้งเดียวด้วย $ไฟล์
ตั้งค่าเป็น ไดเรกทอรี /home/anastasia/สคริปต์
ปัญหาพื้นฐานก็คือว่า
เจ้าของ='ls -l $file | เกรป "^-" | awk {'พิมพ์ $£3'}'
กำหนดสตริงตัวอักษร ls -l $ไฟล์ | เกรป "^-" | awk {พิมพ์
ให้กับตัวแปร เจ้าของ
(แล้วพยายามดำเนินการ $£3}
เป็นคำสั่ง).
สันนิษฐานว่าคุณตั้งใจให้เครื่องหมายคำพูดภายนอกเป็นการแทนที่คำสั่ง แบ็คทิค (และ € 3
เป็นที่ราบ 3
):
เจ้าของ=`ls -l $file | เกรป "^-" | awk {'พิมพ์ $3'}`
แต่วิธีสมัยใหม่จะใช้ $(...)
แทน:
Owner=$(ls -l $file | grep "^-" | awk {'พิมพ์ $3'})
อย่างไรก็ตาม นั่นเป็นวิธีที่แย่มากในการค้นหาเจ้าของไฟล์ แทนที่จะแนะนำ
เจ้าของ=$(stat -c %U -- "$file")
นอกจากนั้น อย่าลืมอ้างอิงการขยายตัวแปรของคุณ ดังนั้นบางอย่างเช่น (ยังไม่ได้ทดสอบ):
#!/bin/bash
forall=/home/anastasia/สคริปต์
สำหรับไฟล์ใน "$forall"/*
ทำ
ถ้า [ -d "$file" ]; แล้ว
ดำเนินต่อ
ไฟ
ถ้า [ -e "$file" ]; แล้ว
เจ้าของ=$(stat -c %U -- "$file")
cp -n "$file" "$forall/$owner"/
chown "$owner" "$forall/$owner/$file"
ไฟ
เสร็จแล้ว
โปรดทราบว่าคุณควรจะสามารถกำจัด เคี้ยว
โดยเพิ่มตัวเลือกที่เหมาะสมสำหรับ ซีพี
(บางที -หน้า
เพื่อรักษาโหมด ความเป็นเจ้าของ การประทับเวลา)