bash: cd'yi en son değiştirilen alt dizine


10

"En son değiştirilen alt dizine geç" demenin kolay ve / veya taşınabilir bir yolu olup olmadığını merak etmek. Ben ls ve awk kullanabilirsiniz ama muhtemelen daha iyi bir yolu var.

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

Yüzlerce alt dizin ve en son değiştirilen dizine gitmek istediğiniz zaman% 99 ile bir "çıktı dosyaları" dizininde bir komut çalıştırmak zorunda. Dizinlerin adlarının önceden ne olacağını bilmiyorum.


1
Neden olmasın cd $(ls -v1td */ | head -1)?
Pablo Castellazzi

İyi bir nokta ... Ben olması gerektiği gibi ls seçenekleri aşina değilim ...
twblamer

Yanıtlar:


13

Dizinlerinizin yazdırılamaz karakterler içermediği varsayılarak:

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

(dizinlere sembolik bağlantıları da dikkate alacağını unutmayın).

Zsh'ye geçmeyi önemsemiyorsanız:

cd ./*(/om[1])

Veya ilk örnekte olduğu gibi dizinlere sembolik bağlantılar eklemek için:

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

0

Zevk almak.

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

Dizin adını neden panoya koymalısınız? Ayrıca, dizin adı bir boşluk içeriyorsa ne olur - bu günlerde oldukça yaygın bir durum.
roaima

Panoyu kullanmak isterseniz daha fazla işlem kolaylığı sağlar.
jasonleonhard

Gerçekten isterseniz nispeten daha fazla alan ekleyebilirsiniz. {print $ 9} yerine {print $ 9, 10 $, 11 $} 'ı istediğiniz kadar kullanabilirsiniz.
jasonleonhard

Boşluğu açıklamak için cevabımı gözden geçirdim.
jasonleonhard

İşte kaba bir açıklama: explainshell.com/…
jasonleonhard

-1

Bu kısa sürüm komutunu deneyin

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

Bu, yalnızca geçerli dizinde en son değiştirilen dosya tür dizininde (veya dizine symlink) sahipse ve adı boşluklar veya joker karakterler veya yeni satırlar içermiyorsa ve - ile başlamazsa çalışır, bu nedenle zaten kabul edilmiş cevap.
Stéphane Chazelas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.