bash: cd ke direktori anak yang paling baru dimodifikasi


10

Ingin tahu apakah ada cara mudah dan / atau portabel untuk mengatakan "ubah ke direktori anak yang paling baru dimodifikasi." Saya dapat menggunakan ls dan awk tetapi mungkin ada cara yang lebih baik.

cd $( ls -ltrd */ | tail -1 | awk '{ print $8 }' )

Saya harus menjalankan perintah di direktori "file keluaran" dengan ratusan subdirektori dan 99% waktu saya ingin pergi ke direktori yang paling baru diubah. Saya tidak tahu nama-nama direktori apa yang ada di muka.


1
Mengapa tidak cd $(ls -v1td */ | head -1)?
— Pablo Castellazzi

Poin yang bagus ... Saya tidak terbiasa dengan pilihan-pilihan seperti seharusnya ...
— twblamer

Jawaban:


13

Dengan asumsi direktori Anda tidak mengandung karakter yang tidak patut:

cd  "$(\ls -1dt ./*/ | head -n 1)"

(perhatikan bahwa itu juga akan mempertimbangkan symlink ke direktori).

Jika Anda tidak keberatan beralih ke zsh:

cd ./*(/om[1])

Atau untuk memasukkan symlink ke direktori seperti pada contoh pertama:

cd ./*(-/om[1])

0

Nikmati.

cdd(){ 
  # cd into the last directory modified/created in pwd
   ls -p | grep / | tail -1 | pbcopy; str=$(pbpaste); cd $str
}

Mengapa meletakkan nama direktori di clipboard? Juga, apa yang terjadi jika nama direktori mengandung spasi - kejadian yang cukup umum dewasa ini.
— roaima

Menggunakan clipboard memungkinkan untuk kemudahan operasi lebih lanjut jika Anda inginkan.
— jasonleonhard

Jika Anda benar-benar mau, Anda dapat menambahkan bidang lebih lanjut dengan relatif mudah. alih-alih {print $ 9} Anda dapat menggunakan {print $ 9, $ 10, $ 11} sebanyak yang Anda inginkan.
— jasonleonhard

Saya telah merevisi jawaban saya untuk menjelaskan ruang kosong.
— jasonleonhard

Berikut ini penjelasan kasarnya: menjelaskanshell.com/…
— jasonleonhard

-1

Coba perintah versi singkat ini

cd $(ls -t | head -n 1)   

Itu hanya berfungsi jika file yang paling baru-baru ini diubah di direktori saat ini adalah tipe direktori (atau symlink ke direktori) dan namanya tidak mengandung kosong atau wildcard atau baris baru dan tidak dimulai dengan -, sehingga hampir tidak ada perbaikan dari sudah diterima jawaban.
— Stéphane Chazelas
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.