Tìm tên tệp thực thi không có đường dẫn


9

Tôi có một thư mục có nhiều tệp thực thi và tôi muốn bỏ qua đường dẫn trong kết quả của lệnh find. Lệnh này hiển thị các tệp tôi muốn xem, nhưng nó cũng liệt kê đường dẫn; Tôi chỉ muốn tên tập tin.

find /opt/g09 -maxdepth 1 -executable

Làm cách nào tôi có thể nhận được kết quả tìm kiếm để chỉ hiển thị tên tệp chứ không phải đường dẫn đầy đủ?

Câu trả lời:


10

Hoặc dùng:

find /opt/g09 -maxdepth 1 -executable -printf "%f\n"

thêm -type fcờ cũng hoạt động ở đây.

Từ findhướng dẫn:

 %f     File's name with any leading directories removed (only the last element).

Câu trả lời này chỉ yêu cầu bạn có GNU findtrong khi những người khác yêu cầu các chương trình khác thao túng kết quả của bạn.


-type f Đó là những gì tôi đã cố gắng nghĩ về! Cảm ơn người đàn ông mã hóa!
j0h

@ j0h không thành vấn đề!
nixpower

6

Sử dụng basename:

find /opt/g09 -maxdepth 1 -executable -exec basename {} \;

Từ man basename:

Print NAME with any leading directory components removed.

Ngoài ra, bạn đang cố gắng findmọi thứ, để hạn chế tìm kiếm của bạn chỉ trong các tệp, sử dụng:

find /opt/g09 -type f -maxdepth 1 -executable -exec basename {} \;

3

Giải pháp rõ ràng nhất với tôi là

(cd /opt/g09; find -maxdepth 1 -executable)

Bởi vì bạn bắt đầu một subshell, bạn vẫn ở trong cùng một thư mục. Ưu điểm của phương pháp này là bạn không cần phân tích cú pháp. Nhược điểm là bạn bắt đầu một subshell (mặc dù bạn sẽ không cảm thấy điều đó).


1
Đó là một ý tưởng thông minh.
AB

1

Với awk, tách đường dẫn bằng dấu phân cách /, in phần cuối cùng ( $NF):

find /opt/g09 -maxdepth 1 -executable | awk -F/ '{print $NF}'

Phiên bản python của bạn ở đâu? ;)
Sergiy Kolodyazhnyy

@Serg haha, tôi phải buộc ngón tay của mình :)
Jacob Vlijm

1

Sử dụng kết hợp findperl

find /opt/g09 -maxdepth 1 -type f -executable | perl -pe 's/.+\/(.*)$/\1/'

Cách tuyệt vời để học một số Perl: P
nixpower
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.