Làm thế nào để 'find' không trả về thư mục hiện tại


11

Tôi hiện đang cố gắng find(và sao chép) tất cả các tệp và cấu trúc thư mục khớp với một mẫu cụ thể, trong một thư mục được chỉ định và tôi đang ở gần đó!

Cụ thể, tôi muốn sao chép đệ quy tất cả các thư mục không bắt đầu bằng ký tự '_' từ một đường dẫn cụ thể.

find /source/path/with/directories -maxdepth 1 -type d ! -name _\* -exec cp -R {} /destination/path \;

Trong / source / path / with / thư mục / path là các thư mục dành riêng cho máy bắt đầu bằng '_' và các thư mục khác và tôi chỉ quan tâm đến việc sao chép các thư mục khác. Vì một lý do ngoài tôi, lệnh find trả về thư mục / source / path / with / thư mục / và do đó sao chép nội dung của nó, các thư mục bắt đầu có '_' đi kèm.

Bất cứ ai có một gợi ý là tại sao đó là?

Cảm ơn,

Pascal


Câu trả lời:


14

findtrả về đường dẫn gốc vì nó phù hợp với tiêu chí của bạn, tức là nó là một thư mục và nó không bắt đầu bằng _.

Bạn đang tìm kiếm -mindepth 1, tôi nghi ngờ:

$ cd /tmp
$ mkdir a
$ touch a/b
$ mkdir a/c
$ touch a/c/d
$ find a
a
a/b
a/c
a/c/d
$ find a -mindepth 1
a/b
a/c
a/c/d

Tham khảo: tìm manpage


Thông minh! làm việc như tôi muốn Tôi đã có nó làm việc bằng cách thêm! -name 'tập tin' nhưng tôi cảm thấy sai ...
Pinpin

0

Thay đổi từ:

find /source/path/with/directories ...

đến:

(shopt -s dotglob; find /source/path/with/directories/* ... )

Cách đó /source/path/with/directoriessẽ không được bao gồm.

Điều shopt -s dotglobnày *cũng sẽ phù hợp với các tệp và thư mục bắt đầu bằng một .(tệp ẩn, thư mục).

Và toàn bộ được bọc trong một vỏ phụ (...)để hạn chế ảnh hưởng của shoptchỉ trong vỏ phụ, nếu không bạn sẽ phải hoàn tác nó sau shopt -u dotglob.


Điều đó sẽ thất bại cho các mục nhập thư mục bắt đầu với .. Đừng thử .*, hoặc bạn sẽ phù hợp với toàn bộ những thứ khác mà bạn không bao giờ có ý định. ;-)
zigg

Điểm tốt, cập nhật câu trả lời, thêm bằng cách sử dụng shopt.
janos
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.