bash: cd vào thư mục con được sửa đổi gần đây nhất


10

Tự hỏi liệu có một cách dễ dàng và / hoặc di động để nói "thay đổi thư mục con được sửa đổi gần đây nhất." Tôi có thể sử dụng ls và awk nhưng có lẽ có một cách tốt hơn.

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

Tôi phải chạy một lệnh trong thư mục "tệp đầu ra" với hàng trăm thư mục con và 99% thời gian tôi muốn đến thư mục được thay đổi gần đây nhất. Tôi không biết tên của các thư mục sẽ là gì trước.


1
Tại sao không cd $(ls -v1td */ | head -1)?
Pablo Castellazzi

Điểm hay ... Tôi không quen thuộc với các tùy chọn ls như tôi nên ...
twblamer

Câu trả lời:


13

Giả sử thư mục của bạn không chứa bất kỳ ký tự không thể in nào:

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

(lưu ý rằng nó cũng sẽ xem xét các liên kết tượng trưng đến thư mục).

Nếu bạn không ngại chuyển sang zsh:

cd ./*(/om[1])

Hoặc để bao gồm các liên kết tượng trưng đến các thư mục như trong ví dụ đầu tiên:

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

0

Thưởng thức.

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

Tại sao phải đặt tên thư mục vào clipboard? Ngoài ra, ee điều gì xảy ra nếu tên thư mục chứa một khoảng trắng - khá phổ biến xảy ra trong những ngày này.
roaima

Sử dụng clipboard cho phép dễ dàng thực hiện các hoạt động hơn nữa nếu bạn muốn.
jasonleonhard

Nếu bạn thực sự muốn, bạn có thể thêm các lĩnh vực tương đối dễ dàng. thay vì {print $ 9}, bạn có thể sử dụng {print $ 9, $ 10, $ 11} bao nhiêu tùy thích.
jasonleonhard

Tôi đã sửa đổi câu trả lời của tôi để giải thích cho khoảng trắng.
jasonleonhard

Dưới đây là một lời giải thích thô: explainshell.com/...
jasonleonhard

-1

Hãy thử lệnh phiên bản ngắn này

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

Điều đó chỉ hoạt động nếu tệp được sửa đổi gần đây nhất trong thư mục hiện tại thuộc loại thư mục (hoặc symlink đến thư mục) và tên của nó không chứa khoảng trắng hoặc ký tự đại diện hoặc dòng mới và không bắt đầu bằng - vì vậy hầu như không cải thiện đã chấp nhận câu trả lời.
Stéphane Chazelas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.