Kết hợp nhiều lệnh thành một dòng


8

Tôi đã có một thư mục có tên mynameđược lưu trữ trong myname.tar. Bây giờ tôi muốn lấy myname.tar, hủy lưu trữ nó và xóa tất cả các tệp trong mynamethư mục (sau khi hủy lưu trữ).

Dưới đây là các lệnh của tôi cho nhiệm vụ trên:

find -name deleteme.tar
tar -xvf deleteme.tar
rm -r delete/*

Các lệnh riêng lẻ này đang hoạt động tốt, nhưng tôi cần một lệnh một dòng, vì vậy tôi đã thử điều này:

find -name deleteme.tar | tar -xvf deleteme.at | rm -r delete/*

Tôi đã nhận được lỗi này:

"rm -r deleteme/*
rm: cannot remove `deleteme/*': No such file or directory "

Tôi đang làm gì sai?


6
Thay vào đó, hãy thử thay thế các |biểu tượng của bạn ;:find -name deleteme.tar; tar -xvf deleteme.tar; rm -r delete/*
ire_and_curses

1
Chuỗi lệnh không có ý nghĩa gì với tôi cả. Nó đọc như: tìm tập tin tar, giải nén tập tin tar, xóa nội dung được trích xuất. Là mục đích để tập thể dục đĩa cứng?
jw013

Tôi có ấn tượng rằng OP đang tìm kiếm thứ gì đó giống như find ... -execvà không phải thứ gì đó đơn giản như ;.
jw013

Câu trả lời:


28

Các biểu tượng bạn đang tìm kiếm được gọi là toán tử điều khiển . Bạn đang sử dụng sai - bạn cần ;hoặc &&.

Với ;, các lệnh được thực hiện theo thứ tự và không thành vấn đề nếu lệnh trước kết thúc thành công hay không.

Với &&, mỗi lệnh không thành công sẽ ngăn những lệnh tiếp theo thực thi.

Bạn có thể đọc thêm ví dụ trong 8.1. điều khiển vận hành


humbug.in/docs/the-linux-training-book/ch08s01.html là một liên kết chết đối với tôi.
isakbob

7

Trong trường hợp bạn đang sử dụng bash, tôi có thể đề nghị bạn đọc trang man của bash ( man bash) và tìm kiếm "toán tử điều khiển" ( /control operator+ [Enter]).

Ở đó, các chức năng khác nhau của những thứ như |;được giải thích.

Bạn có thể muốn xem xét sử dụng &&thay vì ;, mặc dù. Nếu bạn làm điều đó, bạn chỉ có thể thực hiện các chức năng sau trong chuỗi đó nếu chức năng trước đó thành công. Có nghĩa là, nếu findkhông thể tìm thấy tệp của bạn, nó sẽ không cố nén gì cả :

find -name deleteme.tar && tar xvf deleteme.tar && rm -r delete/* || echo "something went wrong" 1>&2

Chỉ là một gợi ý nhỏ, mặc dù ...

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.