ls semuanya yang _not_ sebuah symlink

12

Apakah lsada cara untuk menunjukkan kondisi yang dinegasikan seperti "semua file yang bukan symlink"? Saya banyak menggunakan yang terakhir dalam direktori proyek tetapi negasi lain akan berguna juga.

Untuk saat ini, penelitian saya hanya menghasilkan pembuatan alias untuk sesuatu "seperti":

find . -maxdepth 1 ! -type l | sort # (...)

tapi jelas dengan cara ini saya tidak mendapatkan pewarnaan ls, format kolom, dll ...

Saya kadang menggunakan Bash v3 di OS X 10.8.2 dan Bash v4 di Pangolin.

Robottinosino
sumber

Jawaban:

14

Alih-alih mengirimkannya sort, gunakan ls.

find . -maxdepth 1 \! -type l -exec ls -d {} +

find . -maxdepth 1 \! -type l | xargs ls -d

Jika Anda menggunakan shell zsh, Anda dapat menggunakan ekstensi glob non-portabel:

ls -d *(^@)
Random832
sumber
Thx 4 jawabannya! Mengapa kamu melarikan diri !? Tampaknya bisa berfungsi bahkan tanpa .. Apa yang saya risikokan dengan tidak melarikan diri? Menarik bagaimana Anda menggunakan final +dan tidak \;, tolong jelaskan?
Robottinosino
2
@Robottinosino The +membuatnya mengirim semua ke satu lsperintah alih-alih menjalankannya secara terpisah untuk setiap file (dengan cara ini ls dapat melakukan kolom dan menyortir). Saya lolos! karena itu adalah karakter khusus untuk beberapa kerang meskipun milikmu tampaknya menerimanya dengan baik.
Random832
Kena kau. Barang bagus! Apakah Anda setuju bahwa itu agak melelahkan, hanya untuk meniadakan predikat secara sederhana ls? Mungkinkah ada cara yang lebih baik?
Robottinosino
1
@Robottinosino Diedit dengan sesuatu yang dapat dilakukan zsh. Saya tidak berpikir bash bisa melakukannya.
Random832