Saya ditantang oleh seorang teman untuk melakukan hal berikut:
"Temukan cara tercepat dan termudah untuk menyortir daftar direktori berdasarkan karakter nama file TERAKHIR."
Dia melakukannya di Linux menggunakan yang berikut:
ls | rev | sort | rev
Saya ingin menunjukkan kepadanya alternatif powershell, tapi saya baru saja mulai mempelajari powershell dan saya tidak bisa melakukannya. Jadi, saya selingkuh dan meminta bantuan Anda.
powershell
Richard
sumber
sumber
Jawaban:
Sayangnya Powershell tidak memiliki metode pembalikan yang mudah dan menyenangkan, jadi alih-alih Anda harus mendapatkan huruf terakhir dari string dan mengurutkannya. Ini adalah salah satu cara saya melakukannya:
Seperti yang telah ditunjukkan, ini hanya akan diurutkan berdasarkan huruf terakhir saja, sedangkan saya versi Linux akan mengurutkan berdasarkan huruf terakhir dan selanjutnya, jadi mungkin ada cara yang lebih baik untuk melakukan ini, atau Anda mungkin harus memperkenalkan beberapa perulangan jika Anda menginginkannya seperti itu.
sumber
Anda dapat mencoba ini:
sumber
Tidak sesingkat versi unix, sebagian besar karena tidak ada fungsi String.Reverse () di .NET Framework. Pada dasarnya ini bekerja dengan mengatakan sort 'sort by computing ekspresi ini pada argumen input'.
Sekarang, jika ada shell unix yang lebih baik dari
untuk mencetak semua file dengan yang terbesar terlebih dahulu, saya akan tertarik melihatnya.
sumber
Saya yakin seseorang dapat melakukan ini dengan lebih baik, tetapi di sini ada satu cara yang sepenuhnya kompatibel dengan lynix. Ini memiliki keuntungan meninggalkan Anda dengan
rev
fungsi string yang dapat digunakan kembali untuk kotak peralatan Anda, yaitu mengurutkan seluruh string dan bukan hanya karakter terakhir:Saya pikir pendahuluan di sini dengan baik menunjukkan bagaimana pipa PowerShell adalah array dan bukan hanya string seperti di * nix.
Butuh beberapa saat untuk menyadari bahwa saya harus menggunakan saja
$_
dan tidak$_.name
di dalam ke-2foreach
. Jadi saya telah belajar sesuatu tentang variasi konten array dari satu pipa ke yang berikutnya.* Kredit untuk nyali fungsi rev saya masuk ke http://rosettacode.org/wiki/Reverse_a_string#PowerShell
Bekerja seperti lynix:
Semacam karya seperti lynix, tetapi sangat, sangat lambat:
Jangan bekerja seperti lynix, yaitu gagal mengurutkan semua karakter dari nama file; (hanya mengurutkan karakter terakhir dari string):
sumber
ls | rev | sort | rev
benar - benar valid sendiri. :-)Varian Shay jauh lebih pendek dari jawaban yang diterima dengan mengindeks ke dalam string tetapi bahkan itu dapat ditingkatkan. Anda dapat mempersingkat lebih banyak lagi dengan mengecualikan ruang yang tidak perlu dan menggunakan alias lebih pendek:
Anda juga dapat menggunakan
-Name
argumen (disingkat) untukGet-ChildItem
:yang akan mengembalikan string secara langsung.
Jika Anda benar-benar ingin mengurutkan berdasarkan string terbalik , maka yang berikut berfungsi (tetapi lambat):
Anda dapat membuatnya lebih cepat jika Anda memiliki batas atas pada panjang nama file.
sumber
sumber