bash:最後に変更された子ディレクトリに移動します


10

「最後に変更された子ディレクトリに変更する」と言う簡単な、または移植可能な方法があるかどうか疑問に思います。私はlsとawkを使用できますが、おそらくもっと良い方法があります。

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

何百ものサブディレクトリと99%の時間で、最後に変更されたディレクトリに移動したい「出力ファイル」ディレクトリでコマンドを実行する必要があります。事前にディレクトリの名前がどうなるかわかりません。


1
なんでcd $(ls -v1td */ | head -1)
パブロカステッ

良い点...私はlsオプションに慣れていないので...
twblamer

回答:


13

ディレクトリに印刷できない文字が含まれていないと仮定します。

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

(ディレクトリへのシンボリックリンクも考慮されることに注意してください)。

zshへの切り替えを気にしない場合:

cd ./*(/om[1])

または、最初の例のようにディレクトリへのシンボリックリンクを含めるには:

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

0

楽しい。

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

なぜディレクトリ名をクリップボードに置くのですか?また、ディレクトリ名にスペースが含まれている場合はどうなりますか-最近よくあることです。
roaima 2017

クリップボードを使用すると、必要に応じて操作を簡単に行うことができます。
jasonleonhard 2017

本当に必要な場合は、比較的簡単にフィールドを追加できます。{print $ 9}の代わりに、{print $ 9、$ 10、$ 11}を好きなだけ使用できます。
jasonleonhard 2017

空白を考慮して回答を修正しました。
jasonleonhard 2017


-1

この短いバージョンのコマンドを試してください

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

これは、現在のディレクトリで最後に変更されたファイルのタイプがディレクトリ(またはディレクトリへのシンボリックリンク)であり、その名前に空白、ワイルドカード、または改行が含まれておらず、-で始まっていない場合にのみ機能するため、ほとんど改善されていません。すでに回答を受け入れました。
ステファンChazelas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.