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.