ข้อความผิดพลาด ‘scp not a regular file’ บ่งบอกว่าคุณกำลังพยายามใช้คำสั่ง SCP เพื่อคัดลอกไฟล์ แต่ source หรือ destination ที่ระบุ ไม่ใช่ regular file (อาจเป็น directory, symlink, หรือ special file) คำสั่ง SCP ใช้สำหรับถ่ายโอนไฟล์อย่างปลอดภัยระหว่างโฮสต์ผ่านการเชื่อมต่อ SSH (Secure Shell) ต้องระบุทั้ง source และ destination ดังนั้นข้อผิดพลาดมักเกิดจาก path ไฟล์ไม่ถูกต้อง
ข้อผิดพลาด “scp not a regular file” อาจเกิดบน OS หลายระบบ รวมถึง Unix-like เช่น ‘Linux’, ‘macOS’, ‘BSD’ และ Windows ที่ติดตั้ง SCP (มักมาจากซอฟต์แวร์協力廠商 เช่น ‘PuTTY’ หรือ ‘Cygwin’)
เพื่อช่วยคุณแก้ไข เราจัดทำคู่มือ troubleshooting รายละเอียดดังนี้
1. ปัญหาเรื่อง Syntax (ไวยากรณ์)
Unix และ Linux ตรงตามกฎ syntax ที่เข้มงวด การปฏิบัติตาม syntax ที่กำหนดมีความสำคัญเพื่อให้คำสั่งทำงานถูกต้อง หากพบความผิดพลาดใน syntax ระบบจะแจ้ง error ซึ่งในที่นี้คือ “scp: not a regular file.” มีหลายประการที่ควรระวังเมื่อคัดลอกไฟล์
1.1 ตรวจสอบ Space (ช่องว่าง)
การตรวจสอบช่องว่างในชื่อไฟล์หรือไดเรกทอรีสำคัญใน Unix/Linux เพื่อให้แน่ใจว่าไม่มี leading/trailing spaces ที่อาจก่อให้เกิดปัญหากับคำสั่งหรือสคริปต์
ตัวอย่าง: มีไฟล์ ‘my_file.txt’ ใน ‘/home/user’ ต้องการตรวจสอบ space ในชื่อไฟล์ ใช้คำสั่ง:
ls -Q /home/user
ตัวเลือก -Q จะแสดงชื่อไฟล์/ไดเรกทอรีในเครื่องหมายคำพูด หากมี space จะมองเห็นได้ชัดเจน
เช่น output แสดง:
"my file.txt"
แสดงว่ามี space ในชื่อไฟล์ ควรจัดการโดยใช้ special characters หรือปิดชื่อไว้ในเครื่องหมายคำพูดเมื่อใช้คำสั่ง
เพื่อป้องกันปัญหา ควรใช้ชื่อไฟล์ที่ไม่มี space
1.2 Colon (:) ขาดหรือเกิน
คำสั่ง SCP ต้องใช้ colon เพื่อระบุ remote server และ file path ตัวอย่าง syntax ผิด: ‘scp user@host filepath’ (ขาด colon) ควรเป็น ‘scp user@host:filepath’ ต้องระวังให้ถูกต้องตาม syntax
1.3 สลับ Source และ Destination
การสลับ source และ destination path ใน SCP อาจทำให้เกิดข้อผิดพลาดหรือพฤติกรรมไม่คาดคิด จำเป็นต้องรักษาลำดับที่ถูกต้อง
Syntax ของ SCP คือ:
scp.
ถ้าสลับกัน อาจทำให้คัดลอกทิศทางผิด หรือ error “scp not a regular file” หาก destination ไม่ถูกต้อง
ตัวอย่าง: คัดลอก “file.txt” จาก local ไป remote server:
ถูกต้อง: scp file.txt user@remote:/path/to/destination
ผิด: scp user@remote:/path/to/destination file.txt
คำสั่งผิดจะพยายามคัดลอกไฟล์ remote ชื่อ “file.txt” มาที่ local ผลลัพธ์ไม่พึงประสงค์หรือ error ต้องตรวจสอบลำดับ source/destination ให้ถูกต้องทุกครั้ง
2. ใช้ตัวเลือก “-r”
สาเหตุที่เจอ error นี้คือคุณคัดลอก directory แต่ไม่ได้ระบุให้ระบบรู้ว่ากำลังคัดลอก directory โดยค่าเริ่มต้น SCP ถือว่าเป็น regular file ต้องเพิ่ม option -r เมื่อคัดลอก directory Error “scp not a regular” เกิดเมื่อพยายามคัดลอก directory โดยไม่ใช้ -r
เมื่อต้องการคัดลอก directory ทั้งหมดรวม subdirectories และไฟล์ ใช้ตัวเลือก “-r” โดยไม่มี -r SCP จะคัดลอกเฉพาะไฟล์เดี่ยว ไม่คัดลอก directory
ตัวอย่างการใช้ scp พร้อม “-r”:
scp -r /path/to/source_directory user@remote:/path/to/destination_directory
คำสั่งนี้จะคัดลอกเนื้อหา “source_directory” และ subdirectories ทั้งหมดไปยัง “destination_directory” บน remote server
ABOUT THE AUTHOR

Dawood Janjua
Dawood Janjua เป็นผู้เชี่ยวชาญด้านเทคโนโลยีที่มีความรู้ลึกในการ troubleshoot Windows และ gaming ได้รับการรับรอง CCNA มีประวัติการให้การสนับสนุนลูกค้าที่ยอดเยี่ยม ปัจจุบันทำงานเป็นนักเขียน พยายามจะได้รับการรับรอง CCIE เพื่อขยายความเชี่ยวชาญทางเทคนิคและให้การสนับสนุนระดับภูมิภาค ด้วยความหลงใหลในเกมและความเชี่ยวชาญทางเทคโนโลยี Dawood มุ่งมั่นแบ่งปันความรู้ให้ชุมชนเพื่อช่วยให้ผู้อื่นพัฒนาทักษะและความรู้ในสาขานี้