Tôi có một đoạn script đơn giản mà tôi hiểu hầu hết, đó là lệnh find không rõ ràng. Tôi đã có rất nhiều tài liệu nhưng nó không phục vụ để làm cho nó rõ ràng hơn nhiều. Tôi nghĩ rằng nó hoạt động giống như một vòng lặp for, tệp hiện được tìm thấy được hoán đổi cho {} và được sao chép sang $ HOME / $ dir_name, nhưng tìm kiếm với -path và -prune -o hoạt động như thế nào? Thật khó chịu khi có tài liệu cụ thể và có liên quan như vậy mà vẫn không biết chuyện gì đang xảy ra.
#!/bin/bash
# The files will be search on from the user's home
# directory and can only be backed up to a directory
# within $HOME
read -p "Which file types do you want to backup " file_suffix
read -p "Which directory do you want to backup to " dir_name
# The next lines creates the directory if it does not exist
test -d $HOME/$dir_name || mkdir -m 700 $HOME/$dir_name
# The find command will copy files that match the
# search criteria ie .sh . The -path, -prune and -o
# options are to exclude the backdirectory from the
# backup.
find $HOME -path $HOME/$dir_name -prune -o \
-name "*$file_suffix" -exec cp {} $HOME/$dir_name/ \;
exit 0
Đây chỉ là tài liệu mà tôi biết tôi có thể tìm ra điều này.
mô hình đường dẫn
Tên tệp phù hợp với mẫu vỏ. Các siêu nhân vật không điều trị / hoặc . đặc biệt; vì vậy, ví dụ, tìm. -path "./sr*sc" sẽ in một mục nhập cho một thư mục có tên ./src/misc (nếu có). Để bỏ qua toàn bộ cây thư mục, hãy sử dụng -prune thay vì kiểm tra mọi tệp trong cây. Ví dụ: để bỏ qua thư mục src / emacs và tất cả các tệp và thư mục bên dưới nó, và in tên của các tệp khác được tìm thấy, hãy làm một cái gì đó như thế này:
find . -path ./src/emacs -prune -o -print
Từ hướng dẫn sử dụng Findutils
- Hành động: lệnh -exec; Biến thể không an toàn này của hành động -execdir được chỉ định bởi POSIX. Sự khác biệt chính là lệnh được thực thi trong thư mục mà từ đó find được gọi, nghĩa là {} được mở rộng thành một đường dẫn tương đối bắt đầu bằng tên của một trong các thư mục bắt đầu, thay vì chỉ tên cơ sở của tệp phù hợp.
Trong khi một số triển khai tìm kiếm thay thế {} chỉ khi nó tự xuất hiện trong một đối số, GNU find sẽ thay thế {} bất cứ nơi nào nó xuất hiện.
Và
Ví dụ: để so sánh từng tệp tiêu đề C trong hoặc bên dưới thư mục hiện tại với tệp / tmp / master:
find . -name '*.h' -execdir diff -u '{}' /tmp/master ';'