Pertanyaan daftar file dalam direktori tanpa daftar subdirektori dan isinya di direktori itu


Saya ingin membuat daftar semua file dalam direktori, tanpa daftar salah satu 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 mencantumkan subdirektori di direktori saat ini. Saya mencoba find perintah menggunakan -maxdepth 1 pilihan - namun, format output adalah masalah karena find juga mencetak path bersama dengan nama file.

Jika ada yang bisa tolong beri tahu saya mungkin perintah atau opsi lain untuk digunakan yang akan menghasilkan daftar keluaran hanya file dalam direktori dan bukan nama subdirektori atau isinya, saya akan menghargainya.


22
2018-05-02 00:43


asal


saya bingung ls -d * hanya daftar file dan folder dalam folder saat ini tidak termasuk file / folder tersembunyi di sini; - GM-Script-Writer-62850
ya, tetapi saya tidak ingin folder di direktori itu dicantumkan, hanya ingin file di direktori itu dicantumkan - janet
Serupa: Daftar hanya file biasa (tapi bukan direktori) di direktori saat ini di Unix SE - kenorb


Jawaban:


Solusi berbasis pencarian:

find . -maxdepth 1 -type f -printf '%f\n'

Solusi berbasis Bash:

for f in *; do [[ -d "$f" ]] || echo "$f"; done
##  or, if you want coloured output:
for f in *; do [[ -d "$f" ]] || ls -- "$f"; done

Solusi berbasis bash akan memberikan Anda semua yang bukan direktori; itu akan mencakup hal-hal seperti pipa bernama (Anda mungkin menginginkan ini). Jika Anda secara khusus menginginkan hanya file, baik gunakan find perintah atau salah satu dari ini:

for f in *; do [[ -f "$f" ]] && echo "$f"; done
##  or, if you want coloured output:
for f in *; do [[ -f "$f" ]] && ls -- "$f"; done

Jika Anda akan menggunakan ini secara teratur, Anda tentu saja dapat menempatkan ini ke alias di suatu tempat di Anda ~/.bashrc:

alias lsfiles='for f in *; do [[ -f "$f" ]] && ls -- "$f"; done'

Karena Anda mencatat di komentar bahwa Anda benar-benar di OSX daripada Ubuntu, saya akan menyarankan bahwa waktu berikutnya Anda mengarahkan pertanyaan ke apel atau lebih umum Unix & Linux Situs Pertukaran Stack.


21
2017-10-02 10:37



Pastikan untuk memeriksa apakah solusi ini tepat untuk Anda berdasarkan apakah Anda ingin menyertakan file tersembunyi atau tidak. - Kevin Wheeler


Daftar nama file saja:

 1. ls -p | grep -v / (tanpa file tersembunyi)
 2. ls-l | grep ^ - | tr -s '' | cut -d '' -f 9 (tanpa file tersembunyi)

 a) ls -pa | grep -v / (dengan file tersembunyi)
 b) ls -la | grep ^ - | tr -s '' | cut -d '' -f (dengan file tersembunyi)

Daftar direktori saja:

 1. ls -p | grep / (tanpa disembunyikan)
 2. ls-l | grep ^ d | tr -s '' | cut -d '' -f 9 (tanpa disembunyikan)

 a) ls -pa | grep / (dengan tersembunyi)
 b) ls-l | grep ^ d | tr -s '' | cut -d '' -f 9 (dengan tersembunyi)

grep -v -e ^ $ adalah menghapus garis kosong dari hasil.

Keterangan lebih lanjut:
ls -p flag adalah untuk meletakkan '/' di akhir nama direktori, -R bendera adalah untuk pencarian rekursif, -l untuk daftar dengan info, -a untuk daftar semua (termasuk file tersembunyi) dengan info, grep -v flag adalah untuk hasil invertion dan -e flag untuk pencocokan regex.


8
2018-04-14 11:57





Untuk daftar file biasa saja:

ls -al | grep ^-

Dengan tautan simbolis termasuk:

ls -al | grep ^[-l]

Di mana karakter pertama dari daftar menggambarkan jenis file, jadi - berarti itu adalah file biasa, untuk tautan simbolik l.

Debian / Ubuntu

Cetak nama semua file yang cocok (termasuk tautan):

run-parts --list --regex . .

Dengan jalur absolut:

run-parts --list --regex . $PWD

Cetak nama semua file di /etc yang dimulai dengan p dan diakhiri dengan d:

run-parts --list --regex '^p.*d$' /etc

7
2018-03-04 17:41





Namun solusi lain, yang singkat dan singkat yang berhasil bagi saya:

ls -la | grep -E '^[^d]' > files

5
2017-10-05 09:29



sempurna untukku, ls -alR |grep -E '^-' - here


Saya akan menyarankan untuk menggunakan find dan cukup hapus nama direktori dari output jika perlu:

find . -type f -maxdepth 1 | sed s,^./,,

4
2017-10-02 06:35



-maxdepth 1 harus ada sebelum filter apa pun, dan Anda dapat mencapai hasil ini tanpa menggunakan sed dengan -printf pilihan, yaitu: find . -maxdepth 1 -type f -printf '%f\n' (ini akan lebih efisien daripada menggunakan program ekstra). - evilsoup


ls -1 --file-type | grep -v '/' | sed s/@$// > filelist

Pilihan lain yang memungkinkan adalah

ls -F | grep -v '/' | sed /[@*]$// > filelist

Itu --file-type menempatkan / di akhir folder (tetapi juga @ di ujung tautan simbolis. The grep -v '/' menghapus subdirektori (karena sekarang diakhiri dengan '/'). Itu sed s/@$// menghapusnya @. -1 mencetak satu file per baris sehingga grep -v akan berfungsi dengan benar.


3
2018-05-02 00:56



Terima kasih atas tanggapan Anda. sayangnya, itu tidak bekerja untuk saya, mungkin saya menjalankannya dengan tidak benar. jika saya menggunakan perintah yang Anda berikan, saya mendapatkan kesalahan berikut: ls: opsi ilegal - - penggunaan: ls [-ABCFGHLPRSTWabcdefghiklmnopqrstuwx1] [file ...] saya mencoba menggunakan * karakter wildcard di tempat dan juga di hubungannya dengan --file-type. jika Anda bisa mengklarifikasi, saya akan menghargainya! - janet
Perintah bekerja untuk saya (menjalankan 13.04), versi ubuntu apa yang Anda gunakan ?; -1 tidak masalah untuk grep Anda tidak membutuhkannya; jika Anda ingin menyertakan file yang tersembunyi gunakan -a opsi aktif ls - GM-Script-Writer-62850
sebenarnya, saya sedang mengerjakan mac. mungkin perintahnya sedikit berbeda pada mac os x atau unix? - janet
Anda juga bisa mencoba ls -F | grep -v '/' | sed s/[@*]$// > filelist - Dr.Tower