Đây là chủ đề mở mắt. Tôi đang đưa vào bảng một giải pháp cho vấn đề của riêng tôi và hy vọng làm rõ một hoặc hai điều cho bạn và những người dùng khác đang tìm kiếm sự vững mạnh (như tôi).
Trong trường hợp của tôi, mac của tôi có nhiều ảnh trùng lặp. Khi máy Mac tạo bản sao, chúng sẽ nối thêm một dấu cách và một số cho đến cuối phần mở rộng.
IMG_0001.JPG
có thể có phức tạp đa dạng với IMG_0001 2.JPG
, IMG_0001 3.JPG
v.v. Trong trường hợp của tôi, điều này đã đi vào và tạo nên khoảng 2.600 tập tin vô ích.
Để mọi thứ được bơm lên, tôi đã điều hướng đến thư mục được đề cập.
cd ~/Pictures/
Tiếp theo, hãy tự mình chứng minh rằng chúng tôi có thể liệt kê tất cả các tệp trong thư mục. Bạn sẽ nhận thấy rằng trong regex nó cần thiết để bao gồm các .
mà nói "nhìn vào thư mục này". Ngoài ra, bạn phải khớp với toàn bộ tên tệp để .+
là cần thiết để bắt tất cả các ký tự khác.
find -E . -regex '\..+'
cách thích hợp, kết quả sẽ mang lại dây mà bạn sẽ phải phù hợp bao gồm .
tôi đã đề cập trước đó, các dấu gạch chéo /
, và mọi thứ khác.
./IMG_1788.JPG
./IMG_1789.JPG
./IMG_1790.JPG
./IMG_1791.JPG
Vì vậy, tôi không có thể viết này để tìm bản sao vì nó không bao gồm các "./"
find -E . -regex 'IMG_[0-9]{4} .+'
nhưng tôi thể viết này để tìm bản sao bởi vì nó bao gồm "./"
find -E . -regex '\./IMG_[0-9]{4} .+`
hoặc phiên bản ưa thích hơn với .*/
như đã đề cập bởi @ jackjr300 làm điều tương tự.
find -E . -regex '.*/IMG_[0-9]{4} .+`
Cuối cùng là phần khó hiểu. \d
không được nhận dạng trong BSD. [0-9]
cũng hoạt động tốt. Câu trả lời của người dùng khác trích dẫn hướng dẫn sử dụng re_format trong đó liệt kê cách viết các mẫu phổ biến thay thế những thứ như \d
bằng cú pháp hình vuông-hài hước trông giống như sau: [:digit:]
. Tôi đã thử và thử, nhưng nó không bao giờ hoạt động. Chỉ cần sử dụng [0-9]
. Trong trường hợp của tôi, tôi lãng phí một loạt thời gian nghĩ rằng tôi nên đã sử dụng [:space:]
thay vì một không gian, nhưng tôi tìm thấy (như thường lệ!) Mà tôi chỉ cần thở và thực sự đọc regex. Hóa ra đó là sai lầm của tôi. :)
Hy vọng điều này sẽ giúp ai đó!
Trang web cho biết trang này sử dụng POSIX; có lẽ bạn cần '[: digit:]' thay vì '\ d'? – Wiseguy
@Wiseguy \ d không được hỗ trợ trong BRE (POSIX cơ bản lại) cũng không phải ERE (POSIX mở rộng lại). Các regex mặc định cho GNU tìm thấy trong emacs, mà là tương tự như BRE. BRE không hỗ trợ khoảng thời gian ({8}). – jordanm
@jordanm Phải, đó là lý do tại sao tôi đề nghị sử dụng một lớp nhân vật POSIX. (Trong cờ '-E', OS X [' trang 'tìm người dùng] (https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/find.1.html) đã giới thiệu tôi đến trang ['re_format'] (https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man7/re_format.7.html#//apple_ref/doc/ man/7/re_format) cho cú pháp được hỗ trợ.) – Wiseguy