Có thể nhận được các lượt tìm kiếm và tìm kiếm các ứng dụng mở rộng cho mỗi tập tin được tìm thấy không?


9

Đây là một lệnh hoạt động tốt:

echo Blah: `stat -c %a .`

Có thể có được find -execđể thực hiện điều tương tự cho mọi tập tin được tìm thấy, {}thay cho .?


1
Backticks không thể hoạt động ở đó bởi vì chúng được đánh giá một lần trước khi findđược thực thi và kết quả được sử dụng làm tham số tĩnh để tìm.
Sven

Câu trả lời:


10

Cách tốt nhất để làm điều đó là sử dụng các tham số vị trí. Và $()được ưu tiên thay thế lệnh ove backticks vì nó dễ đọc hơn (không bị nhầm lẫn với các trích dẫn đơn) và có thể dễ dàng lồng nhau mà không cần phải thực hiện nhiều thao tác thoát.

find . -exec bash -c 'echo Blah: $(stat -c %a "$@")' _ {} \;

Gạch dưới là một giữ chỗ cho $0.


6

Để làm gì?

find ... -printf 'Blah: %m\n'

Hoặc sử dụng bash -cnếu bạn thực sự phải:

 find . -exec bash -c 'echo Blah: `stat -c %a {}`' \;

Cảm ơn vì đã giải quyết vấn đề trước mắt của tôi, nhưng tôi vẫn tò mò muốn biết liệu backticks có thể được sử dụng như mô tả hay không. Chỉ để mở rộng tầm nhìn của tôi.
RomanSt

Bạn sẽ phải gọi shell thông qua bash -choặc tương tự.
Ignacio Vazquez-Abrams

0

Cách duy nhất để sử dụng chúng (AFAIK) là đặt chúng vào tệp tập lệnh bash và sử dụng tập lệnh trong -exec. Điều tương tự với$()


0

Đừng quên xargs! Ví dụ của bạn sẽ gọi một quy trình shell mới cho mỗi tệp được tìm thấy.

Tôi thích điều này:

find ... | xargs stat -c "Blah: %a"

findđưa ra một danh sách tất cả mọi thứ được tìm thấy, xargsđọc một danh sách các đối số trên stdinvà thực hiện tham số của nó với các đối số đó trên dòng lệnh, xây dựng một dòng lệnh càng dài càng tốt. Nó hoạt động bởi vì stat, như hầu hết các lệnh / chương trình thích hợp khác, lấy bất kỳ số lượng tham số nào. (so sánh ls, rmechoví dụ)

Nếu bạn nghĩ rằng nó hoàn toàn không cần thiết để khởi chạy một quy trình mới cho mỗi tệp, hãy sử dụng xargs -n 1để chỉ truyền 1tham số cho mỗi lệnh. Bằng cách đó bạn có thể bắt chước các phương thức không hiệu quả như thế này:

find ... | xargs -n 1 stat -c "Blah: %a"

(Hãy thử nó trên một hệ thống tập tin lớn trên một máy tính chậm và thời gian khác biệt!)


Tôi đánh giá cao những nỗ lực, nhưng tôi cần những backticks. Rõ ràng ví dụ của tôi được đơn giản hóa và sử dụng echo + stat; tập lệnh thực không sử dụng cả echo hay stat, vì vậy mẹo của bạn để đặt chúng vào chuỗi định dạng của stat hoàn toàn không giúp ích gì.
RomanSt
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.