Ya, Anda dapat dengan mudah membuat ls
output satu nama file per baris:
ls -a | cat
Penjelasan:Perintah ls
merasakan jika keluarannya adalah ke terminal atau ke file atau pipa dan menyesuaikannya.
Jadi, jika Anda mem-pipe ls -a
untuk python itu harus bekerja tanpa tindakan khusus.
Anda dapat menggunakan ls -1
ls -l
juga akan melakukan pekerjaan
Gunakan -1
opsi (perhatikan ini adalah angka "satu", bukan huruf kecil "L"), seperti ini:
ls -1a
Namun, pertama-tama, pastikan ls
Anda mendukung -1
. GNU coreutils (diinstal pada sistem Linux standar) dan Solaris melakukannya; tetapi jika ragu, gunakan man ls
atau ls --help
atau periksa dokumentasi. Misalnya:
$ man ls
...
-1 list one file per line. Avoid '\n' with -q or -b
Ls dirancang untuk konsumsi manusia, dan Anda tidak boleh mengurai hasilnya.
Dalam skrip shell, ada beberapa kasus di mana penguraian keluaran ls berfungsi adalah cara paling sederhana untuk mencapai efek yang diinginkan. Karena ls mungkin memotong-motong karakter non-ASCII dan kontrol dalam nama file, kasus ini adalah subset dari kasus yang tidak memerlukan mendapatkan nama file dari ls
.
Dalam python, sama sekali tidak ada alasan untuk memanggil ls
. Python memiliki semua ls
fungsi built-in. Gunakan os.listdir
untuk membuat daftar isi direktori dan os.stat
atau os
untuk mendapatkan file metadata. Fungsi lain di os
modul juga cenderung relevan dengan masalah Anda.
Jika Anda mengakses file jarak jauh melalui ssh, cara yang cukup andal untuk mencantumkan nama file adalah melalui sftp:
echo ls -1 | sftp remote-site:dir
Ini mencetak satu nama file per baris, dan tidak seperti ls
utilitas, sftp
tidak memotong-motong karakter yang tidak dapat dicetak. Anda tetap tidak dapat mencantumkan direktori dengan andal di mana nama file berisi baris baru, tetapi hal itu jarang dilakukan (ingat ini sebagai potensi masalah keamanan, bukan masalah kegunaan).
Dalam python (berhati-hatilah karena karakter meta shell harus diloloskan dalam remote_dir
):
command_line = "echo ls -1 | sftp " + remote_site + ":" + remote_dir
remote_files = os.popen(command_line).read().split("\n")
Untuk interaksi yang lebih kompleks, lihat mode batch sftp di dokumentasi.
Pada beberapa sistem (Linux, Mac OS X, mungkin beberapa unit lainnya, tetapi jelas bukan Windows), pendekatan yang berbeda adalah memasang sistem file jarak jauh melalui ssh dengan sshfs, lalu bekerja secara lokal.