Kỹ thuật tôi sử dụng thường xuyên nhất là find | xargs
. Ví dụ: nếu bạn muốn làm cho mọi tệp trong thư mục này và tất cả các thư mục con của nó có thể đọc được trên thế giới, bạn có thể làm:
find . -type f -print0 | xargs -0 chmod go+r
find . -type d -print0 | xargs -0 chmod go+rx
Các -print0
tùy chọn kết thúc với một nhân vật NULL thay vì một không gian. Các -0
tùy chọn chia đầu vào của nó theo cùng một cách. Vì vậy, đây là sự kết hợp để sử dụng trên các tệp có khoảng trắng.
Bạn có thể hình dung chuỗi lệnh này như nhận mọi đầu ra dòng bằng cách find
dán nó vào cuối chmod
lệnh.
Nếu lệnh bạn muốn chạy như là đối số của nó ở giữa thay vì ở cuối, bạn phải sáng tạo một chút. Chẳng hạn, tôi cần thay đổi thành mọi thư mục con và chạy lệnh latemk -c
. Vì vậy, tôi đã sử dụng (từ Wikipedia ):
find . -type d -depth 1 -print0 | \
xargs -0 sh -c 'for dir; do pushd "$dir" && latexmk -c && popd; done' fnord
Điều này có tác dụng for dir $(subdirs); do stuff; done
, nhưng an toàn cho các thư mục có khoảng trắng trong tên của chúng. Ngoài ra, các lệnh gọi riêng biệt stuff
được thực hiện trong cùng một shell, đó là lý do tại sao trong lệnh của tôi, chúng ta phải quay lại thư mục hiện tại với popd
.