Tôi muốn sử dụng find
để tìm các tệp trong một tập hợp các thư mục bị giới hạn bởi các ký tự đại diện, nhưng ở đó có khoảng trắng trong tên đường dẫn.
Từ dòng lệnh, điều này là dễ dàng. Các ví dụ sau đây đều hoạt động.
find te*/my\ files/more -print
find te*/'my files'/more -print
find te*/my' 'files/more -print
Chúng sẽ tìm thấy các tập tin, ví dụ, terminal/my files/more
và tepid/my files/more
.
Tuy nhiên, tôi cần điều này là một phần của kịch bản; những gì tôi cần là một cái gì đó như thế này:
SEARCH='te*/my\ files/more'
find ${SEARCH} -print
Thật không may, bất cứ điều gì tôi làm, tôi dường như không thể trộn các ký tự đại diện và khoảng trắng trong một find
lệnh trong một tập lệnh. Ví dụ trên trả về các lỗi sau (lưu ý nhân đôi dấu gạch chéo ngược không mong muốn):
find: ‘te*/my\\’: No such file or directory
find: ‘files/more’: No such file or directory
Cố gắng sử dụng dấu ngoặc kép cũng thất bại.
SEARCH="te*/'my files'/more"
find ${SEARCH} -print
Điều này trả về các lỗi sau, đã bỏ qua ý nghĩa của dấu ngoặc kép:
find: ‘te*/'my’: No such file or directory
find: ‘files'/more’: No such file or directory
Đây là một ví dụ nữa.
SEARCH='te*/my files/more'
find ${SEARCH} -print
Như mong đợi:
find: ‘te*/my’: No such file or directory
find: ‘files/more’: No such file or directory
Mỗi biến thể mà tôi đã thử trả về một lỗi.
Tôi có một cách giải quyết, điều này có khả năng nguy hiểm vì nó trả về quá nhiều thư mục. Tôi chuyển đổi tất cả các khoảng trắng thành dấu chấm hỏi (ký tự đại diện một ký tự) như thế này:
SEARCH='te*/my files/more'
SEARCH=${SEARCH// /?} # Convert every space to a question mark.
find ${SEARCH} -print
Điều này tương đương với:
find te*/my?files/more -print
Điều này trả về không chỉ các thư mục chính xác mà còn terse/myxfiles/more
, nó không được phép.
Làm thế nào tôi có thể đạt được những gì tôi đang cố gắng làm? Google đã không giúp tôi :(
find "${SEARCH}" -print
?
te*/'my files'/more
.
SEARCH: command not found
với lệnhfind -print
được thực thi.