Jika saya memiliki direktori yang penuh dengan file dan sub direktori. Apa cara terbaik untuk membuat daftar hanya file biasa yang jatuh abjad sebelum string yang diberikan?
Saat ini yang terbaik yang bisa saya lakukan menggunakan bash adalah sebagai berikut:
for x in `find . -maxdepth 1 -type f | sort`
do
if [[ "$x" > './reference' ]]
then
break
fi
echo $x
done
Saya merasa ada cara yang lebih ringkas untuk melakukan ini, tetapi saya tidak yakin apa itu. Ada ide?
awk '$0 >= "'"${FROM}"'" && $0 <= "'"${TILL}"'"'
Dengan
sed
itu lebih ringkas:Yang berarti (setelah disortir) menghapus garis referensi (atau lebih besar) dan semua baris mengikuti ke baris terakhir.
Perintah sed 'd' digunakan di sini dengan rentang alamat, di mana '/^./reference/' adalah awal dan '$' adalah akhir dari rentang. (Dan '$' sebagai alamat berarti baris terakhir.)
sumber
Wajib menjawab zsh, menggunakan
.
kualifikasi glob untuk memilih hanya file biasa dane
untuk memilih lebih lanjut di antara kecocokan:sumber
misalnya.
script-name "$HOME" "reference"
...find
tidak selalu menampilkan yang utama./
, seperti dalam kasusfind bin
, ataufind /tmp
. Jadi jika Anda hanya menginginkan nama-nama file, ini berfungsi.pembaruan: Menambahkan tolower () untuk memungkinkan perbandingan kasus yang tidak sensitif, yang menghasilkan susunan alfabet yang disebutkan dalam pertanyaan ...
Hanya pipa ke
sort
setelahawk
, jika Anda perlu disortir.sumber
$0 < ref
dan berfungsi, tetapi karena tidak ada spasi dalam hasil pencarian, bidang $ 2 tidak ada. Apakah saya melewatkan sesuatu?