Ls ถูกออกแบบมาเพื่อการบริโภคของมนุษย์และ คุณไม่ควรแยกเอาท์พุท
ในเชลล์สคริปต์มีบางกรณีที่การแยกเอาต์พุตของ ls ทำงานเป็นวิธีที่ง่ายที่สุดในการบรรลุเอฟเฟกต์ที่ต้องการ เนื่องจาก ls อาจรวมอักขระที่ไม่ใช่ ASCII และอักขระควบคุมเข้าด้วยกันในชื่อไฟล์กรณีเหล่านี้เป็นชุดย่อยของอักขระที่ไม่ต้องการรับชื่อไฟล์จากls
และการควบคุมตัวอักษรในชื่อไฟล์กรณีเหล่านี้เป็นส่วนหนึ่งของผู้ที่ไม่จำเป็นต้องได้รับชื่อไฟล์จาก
ls
ในหลามอย่างมีเหตุผลที่จะก่อให้เกิดไม่มี Python มีls
ฟังก์ชันการทำงานทั้งหมดในตัว ใช้os.listdir
เพื่อแสดงรายการเนื้อหาของไดเรกทอรีและos.stat
หรือos
เพื่อรับข้อมูลเมตาของไฟล์ ฟังก์ชั่นอื่น ๆ ในos
โมดูลมีแนวโน้มที่จะเกี่ยวข้องกับปัญหาของคุณเช่นกัน
หากคุณกำลังเข้าถึงไฟล์ระยะไกลผ่าน ssh วิธีที่มีประสิทธิภาพในการระบุชื่อไฟล์คือ sftp:
echo ls -1 | sftp remote-site:dir
พิมพ์ชื่อไฟล์หนึ่งชื่อต่อบรรทัดและแตกต่างจาก ls
ยูทิลิตีที่sftp
ไม่สามารถพิมพ์อักขระที่ไม่สามารถพิมพ์ได้ คุณจะยังคงไม่สามารถแสดงรายการไดเรกทอรีที่เชื่อถือได้ซึ่งชื่อไฟล์มีการขึ้นบรรทัดใหม่ แต่ทำได้ยาก (โปรดจำไว้ว่านี่เป็นปัญหาด้านความปลอดภัยที่อาจเกิดขึ้นไม่ใช่ปัญหาการใช้งาน)
ในไพ ธ อน (ระวังว่าเชลล์เมตาอักขระต้องอยู่ในหนีremote_dir
):
command_line = "echo ls -1 | sftp " + remote_site + ":" + remote_dir
remote_files = os.popen(command_line).read().split("\n")
สำหรับการโต้ตอบที่ซับซ้อนยิ่งขึ้นค้นหาโหมดแบตช์ของ sftp ในเอกสาร
ในบางระบบ (Linux, Mac OS X, อาจจะเป็น unices อื่น ๆ แต่ไม่ใช่ Windows) วิธีที่แตกต่างคือการติดตั้งระบบไฟล์ระยะไกลผ่าน ssh ด้วยsshfsแล้วทำงานในพื้นที่