Bagaimana cara mengecualikan direktori saat mendaftar file dalam direktori saat ini?
ls .
^ akan menyertakan direktori dalam daftar.
Bagaimana cara mengecualikan direktori saat mendaftar file dalam direktori saat ini?
ls .
^ akan menyertakan direktori dalam daftar.
Jawaban:
Coba yang ini:
find . -maxdepth 1 -not -type d
ls .
tanpa direktori - dan ini dia.
-ls
atau -exec ls -l {} \;
membuatnya seperti ls -l
tanpa direktori.
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 ls
argumen tambahan juga. Tambahkan a --color=always
dan Anda akan mendapatkan dircolors Anda kembali, atau -a
untuk 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.
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.
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.
ls $(file --no-pad -F' ' * | grep -v directory | cut -d' ' -f1)
Dengan ini Anda masih dapat menggunakan opsi lain yang ls
biasanya diperlukan. Atau ... hapus -v
hanya untuk daftar direktori. Atau ... ganti direktori dengan jenis file lain yang file
memahami dan melaporkan, seperti ASCII, kosong, ELF, dan sebagainya.
ls -t .|while read f;do [ -f "$f" ]&& echo $f;done
sekitar 3x lebih cepat dalam pengujian saya
Saya berada di sistem di mana find
biner tidak mendukung -not
dan 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