Saya ingin membuat daftar semua file dalam direktori, tanpa mendaftar subdirektori yang berada di direktori yang sama, dan mencetak daftar itu ke file baru.
ls -d * > filelist
akan membuat daftar semua file di direktori saat ini, tetapi juga daftar subdirektori di direktori saat ini. Saya mencoba find
perintah menggunakan -maxdepth 1
opsi - namun, format output adalah masalah karena menemukan juga mencetak jalan bersama dengan nama file.
Jika ada yang bisa tolong beri tahu saya mungkin perintah atau opsi lain untuk digunakan yang akan menghasilkan daftar output hanya file dalam direktori dan bukan nama-nama subdirektori atau isinya, saya akan sangat menghargainya.
ls -d *
hanya mencantumkan file dan folder di folder saat ini tidak termasuk file / folder tersembunyi di sini;Jawaban:
Temukan solusi berbasis:
Solusi berbasis bash:
Solusi berbasis bash akan memberi Anda segala sesuatu yang bukan direktori; itu akan mencakup hal-hal seperti pipa bernama (Anda mungkin menginginkan ini). Jika Anda secara khusus ingin hanya file , gunakan
find
perintah atau salah satu dari ini:Jika Anda akan menggunakan ini secara rutin, tentu saja Anda dapat memasukkan ini ke alias di suatu tempat di
~/.bashrc
:Karena Anda mencatat di komentar bahwa Anda sebenarnya menggunakan OSX daripada Ubuntu, saya sarankan Anda lain kali mengajukan pertanyaan ke Apple atau situs Unix & Linux Stack Exchange yang lebih umum .
sumber
Daftar nama file saja:
Daftar direktori saja:
grep -v -e ^ $ adalah untuk menghapus baris kosong dari hasilnya.
Lebih detail :
ls -p flag adalah untuk meletakkan '/' di akhir nama direktori, -R flag adalah untuk pencarian rekursif, -l untuk daftar dengan info, -a untuk daftar semua (termasuk file tersembunyi) dengan info, grep -v flag untuk invertion hasil dan flag -e untuk pencocokan regex.
sumber
Untuk daftar file biasa saja:
Termasuk tautan simbolis:
Di mana karakter pertama dari daftar menjelaskan jenis file, jadi itu
-
berarti file biasa, untuk tautan simbolikl
.Debian / Ubuntu
Cetak nama semua file yang cocok (termasuk tautan):
Dengan jalur absolut:
Cetak nama semua file
/etc
yang dimulai denganp
dan diakhiri dengand
:sumber
Namun solusi lain, solusi singkat naif yang bekerja untuk saya:
sumber
ls -alR |grep -E '^-'
Saya akan menyarankan untuk menggunakan find dan hapus saja nama direktori dari output jika perlu:
sumber
-maxdepth 1
harus ada sebelum filter apa pun, dan Anda dapat mencapai hasil ini tanpa menggunakansed
dengan-printf
opsi, yaitu:find . -maxdepth 1 -type f -printf '%f\n'
(ini akan lebih efisien daripada menggunakan program tambahan).Opsi lain yang mungkin adalah
The
--file-type
menempatkan a / pada akhir folder (tetapi juga @ pada akhir link simbolik.The grep -v '/'
Menghilangkan subdirektori (karena mereka sekarang berakhir dengan '/'). Thesed s/@$//
Menghapus yang @. -1 cetakan satu file per baris sehingga grep -v akan bekerja dengan benar.sumber
-1
tidak masalah untuk menangkap Anda tidak membutuhkannya; jika Anda ingin menyertakan file tersembunyi gunakan-a
opsi padals
ls -F | grep -v '/' | sed s/[@*]$// > filelist