Bagaimana saya mengecualikan direktori saat mendaftar file?


21

Bagaimana cara mengecualikan direktori saat mendaftar file dalam direktori saat ini?

ls .

^ akan menyertakan direktori dalam daftar.

Jawaban:


23

Coba yang ini:

find . -maxdepth 1 -not -type d

3
tetap sederhana: $ find. -type f
jamzed

9
(1) itu akan bersifat rekursif, (2) itu tidak akan mencantumkan symlink. @Steve meminta yang setara dengan ls .tanpa direktori - dan ini dia.
Alexander Gladysh

2
Menambahkan -lsatau -exec ls -l {} \;membuatnya seperti ls -ltanpa direktori.
Ladadadada

15

Untuk mendapatkannya persis sama dengan ls .Anda tidak perlu menampilkan direktori tersembunyi.

find . -maxdepth 1 -not -type d -and -not -name '.*'

dan itu masih membuat Anda dengan './' diawali dengan setiap nama file. Itu tidak benar-benar masalah, tapi saya pikir itu agak jelek. Aku pergi dengan:

ls -p | grep -v '/$'

Dan itu akan memberi Anda daftar yang terlihat sama, dan Anda dapat menambahkan lsargumen tambahan juga. Tambahkan a --color=alwaysdan Anda akan mendapatkan dircolors Anda kembali, atau -auntuk melihat file yang tersembunyi.

Saya suka jawaban Alexander karena dia sebenarnya tergantung pada karakteristik sistem file dari file yang bersangkutan sehingga tidak akan pernah dibodohi. Jawaban saya akan tertipu oleh file yang memiliki '/' sebagai karakter terakhir dalam nama itu. Tapi sepertinya itu meminta masalah.


1
'-tidak' terkait dengan GNU, karena tidak sesuai dengan POSIX, lebih baik untuk tidak mengajarkan opsi-opsi ini karena pengguna dapat memiliki
kebiasaan

2
@JiriXichtkniha apa alternatif POSIX untuk -tidak?
Lucas Gallindo

5

coba ini:

$ temukan. -type f -maxdepth 1

atau ini:

$ ls -p | egrep -v / $

$ ls -la | egrep -v ^ d


3

Meskipun ini adalah posting lama, tapi saya pikir ini mungkin membantu ..

$ ls-l | grep -v ^ d

Ini akan mendaftar semua file termasuk symlinks, karakter dan blokir file.


Jawaban ini sudah diberikan lebih dari setahun sebelumnya oleh macet, (membuat kebisingan visual ini.)
Alexx Roche

2

Solusi "find" di atas kehilangan beberapa kemampuan ls - misalnya: daftar hanya file, diurutkan dalam waktu modifikasi yang menurun.

Jawaban "ls -p | grep" tidak secara elegan menangani elemen ls lainnya seperti -R jika diinginkan

Jawaban berikut, sementara lebih verbose, menurut saya mencerminkan paling benar ls perilaku dan paling fleksibilitas untuk memilih "hanya file"

ls -t . | while read line; do
  if [ -f $line ]; then
    echo $line
  fi 
done

Cukup ganti sakelar ls seperti yang diinginkan dan hasilnya akan dikembalikan dengan file saja. Jika tautan dan item lain juga diperlukan, pengerjaan ulang kecil perlu dilakukan untuk pengujian untuk dimasukkan.


0
ls $(file --no-pad  -F' '  * | grep -v directory | cut -d' ' -f1)

Dengan ini Anda masih dapat menggunakan opsi lain yang lsbiasanya diperlukan. Atau ... hapus -vhanya untuk daftar direktori. Atau ... ganti direktori dengan jenis file lain yang filememahami dan melaporkan, seperti ASCII, kosong, ELF, dan sebagainya.


Ini tidak berfungsi jika salah satu nama file yang dicantumkan berisi spasi.
Psychonaut

ls -t .|while read f;do [ -f "$f" ]&& echo $f;donesekitar 3x lebih cepat dalam pengujian saya
Alexx Roche

0

Saya berada di sistem di mana findbiner tidak mendukung -notdan saya akhirnya menggunakan:

ls|while read f;do [ -f "$f" ]&& echo $f;done

Keuntungan: Tidak bergantung pada apa pun selain sh ls echo
Kompatibel dengan bash dan dash
Dapat diubah agar sesuai dengan hal lain, (seperti direktori) dengan mengubah Lebih -f
cepat dari beberapa jawaban dan menggunakan lebih sedikit RAM dan CPU

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.