Tôi muốn shotwell mở tất cả các tệp .cr2 trong một thư mục và tất cả các thư mục con của nó, tôi sử dụng dòng lệnh nào?


9

Cái gì đó như

shotwell *.cr2 ./

Điều đó không hiệu quả, nhưng về cơ bản tôi muốn sử dụng shotwell để mở tất cả các tệp kết thúc bằng .cr2và trong thư mục hiện tại (bao gồm cả các thư mục con)

Bối cảnh là tôi đang thiếu những bức ảnh mà tôi đã chụp trên máy ảnh mà tôi đã xóa khỏi thẻ nhớ.

Có những hình thu nhỏ cho chúng trong "hình ảnh bị thiếu" của shotwell nhưng tôi không thể tìm thấy chúng. Vì vậy, tôi nghĩ rằng tôi sẽ chạy photorecđể thử và tìm thấy chúng. Kết quả là photorec đã cho tôi một lượng lớn các thư mục và tệp, đủ để nó lấp đầy ổ cứng của tôi. Thay vì chọn từng tệp một, tôi quyết định tìm kiếm các tệp .cr2 trên ổ cứng của mình, đồng thời tránh một thư mục cụ thể có tên Photogsmà tôi biết không có chúng vì chúng không phải là một phần của kết xuất photorecdữ liệu.


@EliahKagan xem bình luận (tiếp tục trò chuyện!) Để biết chi tiết tại đây . Tôi không chắc chắn liệu và làm thế nào để chỉnh sửa câu hỏi, vì vậy xin vui lòng tư vấn, cho rằng bạn đã tạo ra một câu trả lời đẹp như vậy
Zanna

@ user285884 Các chỉnh sửa gần đây nhất cho câu trả lời của tôi bao gồm một quy trình chi tiết để xây dựng một cây liên kết tượng trưng cho các tệp .cr2, sau đó có thể được mở trong Shotwell (và một số phương thức khác). Điều này sẽ khắc phục vấn đề xem các tệp bổ sung, không phải .cr2 trong Shotwell cũng như vấn đề không có đủ dung lượng trên thiết bị đích để di chuyển hoặc sao chép các tệp. Tôi không chắc chắn, từ cuộc trò chuyện có liên quan , nếu bạn đã giải quyết điều này.
Eliah Kagan

Câu trả lời:


6

Thông thường, bạn sẽ chỉ muốn mở Shotwell và kéo vào thư mục.

Nếu bạn cần, bạn có thể tạo shell xây dựng danh sách các tệp CR2 và yêu cầu Shotwell chỉ mở các tệp đó. Đôi khi, đó có thể là những gì bạn muốn, nhưng trong trường hợp này không thực hiện đúng những gì bạn cần do hành vi của Shotwell - trong một số trường hợp khác, một tính năng - tự động hiển thị cho bạn các tệp hình ảnh khác (thuộc tất cả các loại) cư trú trong cùng thư mục với hình ảnh bạn đã mở.

Để đảm bảo Shotwell chỉ biết về những hình ảnh bạn quan tâm, bạn có thể sao chép cây thư mục ở một nơi khác, chỉ sao chép .cr2các tệp và các thư mục chứa chúng, nhưng không có gì khác. Điều đó có thể chiếm không gian bổ sung đáng kể, mặc dù. Vì vậy, một cách tiếp cận khác là xây dựng một hệ thống phân cấp các liên kết tượng trưng - trong đó thay vì có một cây thư mục mới của các bản sao của các .cr2tệp gốc của bạn , bạn có một cây thư mục mới của các syminks cho chúng. Điều này chiếm không gian ít hơn nhiều.

Câu trả lời này bao gồm tất cả những cách tiếp cận.

Mở Thư mục hình ảnh (Bao gồm các thư mục con) trong Shotwell

Shotwell tự cung cấp cho bạn hai cách để mở toàn bộ thư mục ảnh. Nếu những điều này sẽ làm việc cho bạn, thì bạn sẽ không cần phải làm bất cứ điều gì thông minh trong dòng lệnh hoặc thậm chí sử dụng nó cả. Nếu không, bạn có thể sẽ làm điều này liên quan đến một kỹ thuật khác. (Ví dụ: nếu bạn kết thúc việc tạo một thư mục mới của các liên kết tượng trưng hoặc bản sao của các .cr2tệp của mình , bạn có thể sử dụng một trong những cách sau để mở nó.)

Cách 1: Chỉ cần mở toàn bộ thư mục trong Shotwell.

Trong Shotwell, trong menu Tệp , bấm Nhập từ Thư mục . Sau đó chọn thư mục bạn muốn nhập hình ảnh từ đó. Điều này sẽ không bị giới hạn đối với .cr2các tệp, nhưng nếu bạn đang mở các tệp từ nhiều thư mục con chứa .cr2hình ảnh được tạo từ máy ảnh kỹ thuật số, thì rất có thể đó sẽ là các tệp duy nhất hiện diện.

Ảnh chụp màn hình của mục menu Nhập từ Thư mục trong menu Tệp của Shotwell.

Xem câu trả lời của Jakob để hiển thị tất cả các hình ảnh theo cách đệ quy (bao gồm mọi thư mục con) để biết thêm thông tin.

Cách 2: Kéo thư mục vào Shotwell.

Với hầu hết các môi trường máy tính để bàn và trình duyệt tệp, bạn cũng có thể mở Shotwell và kéo thư mục chứa hình ảnh của bạn vào cửa sổ Shotwell. Giống như Nhập từ Thư mục , đây là một cách khác mà Shotwell khuyên bạn nên mở ảnh.

Ảnh chụp màn hình của tôi kéo thư mục Desktop của tôi vào Shotwell để nhập hình ảnh chứa trong đó.

Khi bạn kéo từ cửa sổ trình duyệt tệp hoặc máy tính để bàn của bạn vào Shotwell, bạn có thể kéo đến một thư viện cụ thể. Hoặc nếu bạn không có nhiều thư viện được thiết lập, bạn có thể kéo về cơ bản bất cứ nơi nào và nó hoạt động. (Bạn thậm chí không phải kéo vào khung bên trái.)

Phương pháp này rất thuận tiện và mạnh mẽ như chọn thư mục theo cách thủ công (với Tệp > Nhập từ Thư mục , như được mô tả ở trên). Khi bạn mở tệp hoặc thư mục bằng một trong hai phương pháp này , Shotwell cung cấp cho bạn tùy chọn để mở ảnh mà không cần sao chép chúng vào thư viện của nó.

Ảnh chụp màn hình của hộp thoại trong Shotwell yêu cầu người dùng chọn giữa sao chép hình ảnh vào vị trí thư viện Shotwell của họ hoặc nhập chúng vào vị trí mà không cần sao chép.

Để nhập mà không sao chép, nhấp vào Nhập tại chỗ thay vì Sao chép ảnh .


Ra mắt Shotwell với một danh sách tên tập tin hình ảnh

Nếu vì lý do nào đó bạn muốn hoặc cần phải làm điều này bằng cách chạy một lệnh trong Terminal, bạn có thể chạy shotwelllệnh và chuyển tên tệp của mỗi hình ảnh cho nó làm đối số. Globstar làm cho nó dễ dàng:

shopt -s globstar
shotwell **/*.cr2

Điều đó sẽ mở các .cr2tập tin nằm ở bất cứ đâu trong thư mục hiện tại. Nó khác với việc chạy Shotwell và sau đó kéo thư mục vào, trong đó Shotwell sẽ chỉ cố gắng nhập các tệp có tên bạn đặt cho nó. Tuy nhiên, vì Shotwell thường hiển thị các tệp hình ảnh khác từ cùng thư mục với các tệp bạn đã bảo nó mở, nên điều này có thể không phù hợp với nhu cầu của bạn. (Và thêm thông tin bạn đã cung cấp về vấn đề của bạn cho thấy rằng không phải như vậy . Xem bên dưới để biết cách thay thế.)

Điều này không bao gồm các tệp hoặc thư mục con có tên bắt đầu bằng. . Tuy nhiên, nếu bạn có các tệp CR2 có tên bắt đầu bằng dấu chấm, thì hầu hết thời gian bạn có thể không muốn mở chúng trong Shotwell. Trừ khi bạn cố tình đặt tên cho các tệp hoặc thư mục của mình theo cách này, một dotfile có phần mở rộng tên tệp hình ảnh hoặc tài liệu có nhiều khả năng là tệp siêu dữ liệu hơn là hình ảnh hoặc tài liệu thực tế. Ví dụ: macOS thường thêm các tệp như vậy (ví dụ: ._kittens.cr2đối với ảnh thực tế kittens.cr2) khi truy cập phương tiện bên ngoài (bao gồm ổ đĩa flash và máy ảnh kỹ thuật số).

Nếu bạn cũng muốn tìm các tệp có tên bắt đầu bằng .hoặc nằm trong các thư mục có tên bắt đầu. , thì cũng bật dotglob. Bạn có thể làm điều này với shopt -s dotglobhoặc bằng cách chuyển cả hai globstardotglobvào phần shoptdựng sẵn:

shopt -s globstar dotglob

Theo mặc định, globs là trường hợp nhạy cảm. Nhưng bạn có thể muốn để phù hợp với tên tập tin trường insensitively , để mở các tập tin kết thúc bằng .cr2, .Cr2, .cR2, và .CR2. Để làm điều đó, một trong hai:

  • Kích hoạt nocaseglob bằng cách chạy shopt -svới nocaseglobchính nó hoặc với các tùy chọn shell khác. Ví dụ: để chạy shotwelltrên tất cả .cr2các tệp, tìm kiếm không phân biệt chữ hoa chữ thường và bao gồm .-files và tệp trong .-directories:

    shopt -s globstar dotglob nocaseglob
    shotwell **/*.cr2
    
  • Hoặc , sử dụng .[cC][rR]2thay vì .cr2trong mô hình toàn cầu của chính bạn. Ví dụ, điều này thực hiện tương tự như trên:

    shopt -s globstar dotglob
    shotwell **/*.[cC][rR]2
    

    Lưu ý rằng độ nhạy trường hợp hoàn toàn tách biệt với việc .tệp và thư mục có khớp hay không . Bạn có thể xóa dotglobkhỏi các ví dụ trên và chúng vẫn có thể không phân biệt chữ hoa chữ thường.

Để chỉ định một thư mục thay vì chỉ sử dụng thư mục hiện tại, hãy đặt tên và a /trước toàn **/*.cr2cầu. Ví dụ, thay thế shotwelllệnh trên bằng lệnh này sẽ mở tất cả các .cr2tệp bên trong Picturesthư mục con của thư mục chính của bạn:

shotwell ~/Pictures/**/*.cr2

Không giống như lệnh đầu tiên sử dụng thư mục hiện tại của bạn, bất kể bạn chạy lệnh đó ở đâu, bạn sẽ bảo Shotwell mở cùng các tệp.

Kiểm tra

Nếu bạn thực sự phải sử dụng thiết bị đầu cuối cho việc này, thì tôi đoán nó có thể là một phần của một cái gì đó phức tạp hơn. Nếu bạn thích, bạn có thể kiểm tra các lệnh như vậy trước khi thực sự chạy chúng bằng cách thay thế shotwellbằng printf '%s\n'. Thay vì chuyển tên tệp cho Shotwell, nó liệt kê chúng một dòng trên mỗi dòng. Ví dụ: trên máy của tôi:

ek@Io:~$ printf '%s\n' ~/tmp/**/*.cr2
/home/ek/tmp/another image.cr2
/home/ek/tmp/image.cr2
/home/ek/tmp/some folder/image3.cr2

Tắt Globstar và các tùy chọn Shell khác

Tùy chọn shell globalstar đã được kích hoạt để hoạt động, đó là những gì shopt -s globstarlệnh (ở trên) đã làm. Nếu nó đã được kích hoạt, thì bạn không cần nhiều lệnh. Và bạn chỉ cần thiết lập globalstar một lần cho mỗi phiên bản shell.

Bạn có thể tắt globalstar trở lại bằng cách chạy:

shopt -u globstar

Và bạn có thể kiểm tra xem Glostar đang bật hay tắt bằng cách chạy:

shopt globstar

Nếu bạn đang sử dụng globalstar trong một tập lệnh, bạn nên xem xét tắt nó đi nếu có thể có mã xuất hiện sau đó trong cùng một tập lệnh không được viết với Glostar. Ví dụ, viết **khi bạn muốn nói *là thường không có vấn đề gì khi Glostar bị vô hiệu hóa, nhưng khi bật globalstar, nó có thể gây ra vấn đề nghiêm trọng bằng cách tạo một lệnh ảnh hưởng đến nhiều tệp hơn nhiều so với dự định của ai đó.

Tương tự, nếu bạn đã sử dụng dotglob hoặc nocaseglob và bạn cũng muốn tắt chúng đi, bạn có thể làm như vậy với shopt -u dotglobshopt -u nocaseglob, tương ứng. Bạn cũng có thể chuyển nhiều tùy chọn shell shopt -uđể hủy đặt chúng cùng một lúc. Ví dụ: để tắt globstar, dotglobnocaseglob:

shopt -u globstar dotglob nocaseglob

So với globalstar, bạn có thể mắc ít lỗi nghiêm trọng hơn do bạn quên bạn để lại dotglob hoặc nocaseglob. Nhưng những người khác (bao gồm cả những người bạn tham khảo trên các trang web như Ask Ubuntu) thường cho rằng dotglob và nocaseglob bị vô hiệu hóa khi họ đề xuất các lệnh cho bạn sử dụng, trừ khi bạn nói với họ cách khác.

Để biết thêm thông tin về các tùy chọn vỏ liên quan đến toàn cầu này (và cả về các khối u nói chung ), hãy xem hướng dẫn tham khảo bash . Tất cả đều được bảo hiểm chủ yếu trong 4.3.2 Shopt Buildin . Đối với sao, xem thêm 3.5.8.1 Ghép mẫu . Đối với dotglob, xem thêm Mở rộng tên tệp 3.5.8 .


Xây dựng cây thư mục mới

Vì trong trường hợp của bạn, bạn dường như thực sự cần Shotwell chỉ hiển thị .cr2các tệp, bạn không có .cr2tệp trong cùng thư mục với .cr2tệp và trình duyệt hình ảnh trong Shotwell cũng tự động cung cấp các tệp đó , có vẻ như bạn sẽ cần phải có thư mục không chứa các tệp hình ảnh nào khác ngoài các .cr2tệp bạn đang cố mở.

Di chuyển các tệp, như bạn đã đề xuất , là một cách tiếp cận, nhưng tôi khuyên bạn nên thay thế sao chép các tệp hoặc tốt hơn là tạo các liên kết tượng trưng đến các tệp (xem thêm FOLDOC ), bởi vì:

  • Nếu bạn đang di chuyển các tệp trên các thiết bị, điều đó đòi hỏi phải sao chép, vì vậy trong trường hợp đó, việc di chuyển sẽ không nhanh hơn.
  • Nếu bạn có không gian, việc giữ một thư mục chưa sửa đổi của tất cả mọi thứ bạn đã bắt đầu cho đến khi bạn hài lòng rằng những gì bạn đã làm là đúng theo nhu cầu của bạn. Rõ ràng điều này không phải lúc nào cũng có thể áp dụng hoặc thực tế. Nhưng trong trường hợp của bạn, các tệp này là kết quả của hoạt động khôi phục dữ liệu. Nó có thể hữu ích để giữ một bản ghi dễ dàng sử dụng chính xác những gì đã được phục hồi và từ đâu.
  • Nếu bạn chọn tạo các liên kết tượng trưng, lượng không gian bổ sung được tiêu thụ là vô cùng nhỏ . (Tuy nhiên, nếu đĩa đích hoàn toàn đầy đủ , thì bạn vẫn sẽ cần giải phóng không gian trên nó - hoặc sử dụng đĩa đích khác - để tạo liên kết tượng trưng.)

Có một quyết định khác cho bạn để thực hiện, quá. Bạn có tạo tất cả các mục mới (cho dù chúng là bản sao hoặc liên kết tượng trưng) trong cùng một thư mục, làm phẳng hệ thống phân cấp tệp? Hoặc bạn có tạo các thư mục tại đích tương ứng với mỗi thư mục tại nguồn chứa ít nhất một .cr2tệp không?

  • Làm phẳng hệ thống phân cấp tệp cho phép bạn xem tất cả các tệp cùng một lúc, dễ dàng. Đặc biệt, có thể dễ dàng thấy tất cả tên và kích thước của tệp cùng lúc, cũng như chọn bất kỳ tổ hợp tệp nào trong trình duyệt tệp đồ họa.

  • Nhưng nó cũng mất thông tin về những thư mục mà chúng nằm trong đó, có thể có giá trị (mặc dù bạn có thể quay lại thư mục gốc và tìm chúng ở đó nếu bạn không di chuyển các tệp).

  • Tuy nhiên, vấn đề lớn hơn với việc làm phẳng hệ thống phân cấp tệp là điều gì xảy ra nếu bạn có hai hoặc nhiều tệp cùng tên ở những nơi khác nhau . Nếu bạn làm phẳng hệ thống phân cấp tệp, thì tùy thuộc vào cách bạn thực hiện, tất cả trừ cái đầu tiên sẽ không được sao chép (hoặc được liên kết) và bạn sẽ gặp lỗi hoặc cảnh báo, hoặc tất cả trừ bản sao (hoặc liên kết) cuối cùng sẽ được ghi đè .

    Đây là một lý do khác tôi khuyên bạn nên sao chép hoặc tạo liên kết tượng trưng thay vì di chuyển tệp. Nếu bạn "thành công" di chuyển nhiều tệp vào cùng một tệp, bạn đã mất tất cả trừ tệp cuối cùng!

Do những nhược điểm của việc làm phẳng mọi thứ vào một thư mục không có thư mục con, các cách tiếp cận tôi thực hiện ở đây xây dựng một cây thư mục mới tại đích.

Cách 1: Sao chép

Tôi hiển thị điều này trước tiên vì nó đơn giản hơn một chút, nhưng tôi đề nghị bạn thay vào đó hãy tạo các liên kết tượng trưng ("Cách 2"), đặc biệt nếu ổ đĩa đích có thể không có đủ dung lượng để chứa tất cả các tệp. "Cách 2", phức tạp hơn một chút, chi tiết hơn nhiều vì dường như có ít tài nguyên hơn về cách sử dụng kỹ thuật đó, đó là cách tôi mong đợi hầu hết mọi người trong tình huống này sẽ thích và thông tin áp dụng cho cả hai phương pháp - lời khuyên cơ bản về việc thoát khỏi không gian trong các đường dẫn - được đưa ra ở đó chứ không phải ở đây.

Khi bạn cần sao chép một cây thư mục và bạn cần tùy chỉnh thao tác sao chép, bạn thường nên sử dụng rsyncthay vì cp. Đây là một trong những trường hợp đó.

Thay thế srcbằng đường dẫn đến thư mục cấp cao nhất chứa tất cả các tệp CR2 của bạn và thay thế destbằng tên của thư mục bạn muốn tạo sẽ chứa một hệ thống phân cấp các liên kết tượng trưng đến các tệp CR2, hãy chạy:

rsync -rl --prune-empty-dirs --include='*/' --include='*.cr2' --exclude='*' src/ dest

Đừng quên /tên của thư mục nguồn, trừ khi bạn muốn tạo thêm một thư mục cấp cao nhấtdest . Đó là, nếu bạn bỏ qua dấu vết /, thì rsyncsẽ tạo thư mục đích cho bạn, bên trong dest. Ví dụ, giả sử srclà một đường dẫn tương đối không chứa /. Sau đó:

  • Với lệnh src/của bạn rsync, bạn nhận được một liên kết tượng trưng dest/foo/bar.cr2cho tệp src/foo/bar.cr2.
  • Với lệnh srccủa bạn rsync, bạn nhận được một liên kết tượng trưng cho tệp .dest/src/foo/bar.cr2src/foo/bar.cr2

Vì nó có thể gây nhầm lẫn cho thư mục cấp cao nhất, nơi các liên kết tượng trưng sẽ được đặt cùng tên với thư mục cấp cao nhất chứa các .cr2tệp mà các liên kết tượng trưng sẽ trỏ đến, tôi khuyên bạn nên bao gồm /ở cuối đích tên thư mục trong rsynclệnh của bạn . (Và, đối với thư mục nguồn, hãy cung cấp cho nó một thư mục trống, không tồn tại hoặc dành riêng cho mục đích này. Nếu không, bạn sẽ làm lộn xộn một số thư mục khác.)

Như thường là trường hợp khi bạn vượt qua tên của một tập tin hoặc thư mục để một chương trình dòng lệnh hoặc kịch bản, nếu đích hoặc nguồn đường dẫn thư mục của bạn chứa bất kỳ khoảng trống (hoặc các ký tự điều trị đặc biệt bởi lớp vỏ, giống như \, $, ', và khác nhau dấu câu khác), sau đó bạn sẽ phải trích dẫn chúng . Tôi đã trình bày chi tiết cách thực hiện việc này, trong trường hợp phổ biến nhất của không gian, trong "Cách 2" - lời khuyên về trích dẫn trong phần đó cũng áp dụng ở đây. Tuy nhiên, nếu bạn không chắc chắn làm thế nào để trích dẫn tên của một thư mục, bạn có thể yêu cầu Ubuntu làm điều đó cho bạn bằng cách chỉ cần kéo thư mục vào Temrminal; đường dẫn đầy đủ của nó sẽ được dán với trích dẫn chính xác .

Sau khi sao chép chỉ các .cr2tệp và các thư mục chứa chúng, bạn có thể mở thư mục đích trong Shotwell. (Xem phần "Mở thư mục hình ảnh (Bao gồm các thư mục con) trong Shotwell" ở trên.) Tuy nhiên, trước khi chạy rsync, tôi khuyên bạn nên quyết định xem có muốn bỏ qua các mục bắt đầu bằng .và nếu bạn muốn bao gồm các mục có hậu tố biến thể trường hợp. Nếu vậy, bạn sẽ phải chạy một số rsynclệnh hơi khác nhau .

Tùy chỉnh Xử lý các mục nhập chấm và độ nhạy trường hợp

Bạn có thể muốn sử dụng một rsynclệnh khác để thay đổi xem các tệp và thư mục bắt đầu bằng dấu chấm có bị bỏ qua hay không và bạn có muốn phân biệt chữ hoa chữ thường trong việc khớp với hậu tố hay không .cr2.

Lệnh trên không bao gồm các thư mục và tệp có tên bắt đầu bằng .. Để loại trừ các tệp và thư mục như vậy, đặt --exclude='.*/' --exclude='.*'trước tất cả các --includes và --excludes khác. Đó là, sử dụng rsynclệnh này thay thế (với sự thay thế phù hợp cho srcdest, tất nhiên):

rsync -rl --prune-empty-dirs --exclude='.*/' --exclude='.*' --include='*/' --include='*.cr2' --exclude='*' src/ dest

Các rsynclệnh như vậy, đến nay đã có trường hợp nhạy cảm và sẽ không sao chép các tập tin kết thúc bằng .CR2, .Cr2hoặc .cR2hơn .cr2. Nếu bạn muốn các tệp đó được sao chép, thì bạn sẽ cần tính đến điều đó bằng cách sử dụng --includemẫu *.[cC][rR]2thay thế *.cr2.

Lệnh thứ ba này không phân biệt chữ hoa chữ thường và (như lệnh thứ nhất) không bỏ qua các tệp và thư mục có tên bắt đầu bằng .:

rsync -rl --prune-empty-dirs --include='*/' --include='*.[cC][rR]2' --exclude='*' src/ dest

Nếu bạn thực hiện phương pháp sao chép các tệp với rsyncvà bạn không chắc chắn về những lệnh nào bạn muốn, tôi khuyên bạn nên sử dụng lệnh đó nếu bạn muốn đảm bảo không bỏ lỡ bất kỳ điều gì. Tuy nhiên, bạn nên lưu ý rằng các dotfiles có thể chứa siêu dữ liệu và các dotfiles có tên giống như hình ảnh có thể không thực sự là hình ảnh. Xem các cuộc thảo luận về dotfiles trong phần "Khởi chạy Shotwell với Danh sách tên tệp hình ảnh" ở trên, và trên dotfiles và phân biệt chữ hoa chữ thường trong "Cách 2" bên dưới.

Lệnh thứ tư này không phân biệt chữ hoa chữ thường và (như lệnh thứ hai) không bỏ qua các tệp và thư mục có tên bắt đầu bằng .:

rsync -rl --prune-empty-dirs --exclude='.*/' --exclude='.*' --include='*/' --include='*.[cC][rR]2' --exclude='*' src/ dest

Cách 2: Tạo liên kết tượng trưng

Đây là những gì tôi khuyên bạn nên làm, mặc dù Cách 1 vẫn ổn nếu bạn có đủ dung lượng trên ổ đĩa đích. Bạn không cần phải đọc Cách 1 để sử dụng.

Phương pháp được trình bày ở đây tạo ra một danh sách các .cr2tệp và vòng lặp thông qua danh sách, tạo các thư mục đích khi cần thiết và điền chúng với các liên kết tượng trưng đến mỗi .cr2tệp.

Điều này chỉ đủ phức tạp để tôi đề nghị đưa nó vào một kịch bản thay vì chỉ gõ nó một cách tương tác. Bạn có thể đặt tập lệnh bất cứ nơi nào bạn thích, nhưng để thuận tiện, tôi sẽ chỉ cho bạn cách thực hiện với tập lệnh được đặt trực tiếp trong thư mục nhà của bạn.

Viết (hoặc dán vào) tập lệnh.

Tạo một tệp văn bản make-symlinks, trong thư mục nhà của bạn. Không cần mở rộng tập tin.

Bạn có thể làm điều này với bất kỳ trình soạn thảo văn bản nào, như Vim, Nano, Gedit hoặc Leafpad. Mặc dù vậy, đừng sử dụng trình xử lý văn bản như LibreOffice Writer. (Bạn thậm chí có thể làm điều đó bằng cách chạy cat > ~/make-symlinks, dán nội dung của tệp và nhấn Ctrl+ Dtrên một dòng mới, nếu bạn muốn.)

Nếu bạn đặt tên cho tập lệnh khác make-symlinks, hãy đảm bảo sử dụng tên đó khi bạn chạy các lệnh sử dụng tập lệnh sau.

#!/bin/bash

shopt -s globstar dotglob nocaseglob

for f in **/*.cr2; do
    mkdir -p "$1/$(dirname "$f")"
    ln -s "$PWD/$f" "$1/$f"
done

Đặt nó trong tệp và lưu tệp. Kịch bản này sử dụng globalstar, một tính năng Bash được giải thích ở trên trong "Khởi chạy Shotwell với Danh sách tên tệp hình ảnh" .

Bạn có thể thay đổi cách nó xử lý các mục chấm và phân biệt chữ hoa chữ thường.

Tùy thuộc vào nhu cầu của bạn, bạn có thể muốn thực hiện một số thay đổi:

  • Nếu bạn không muốn bao gồm .cr2các tệp có tên bắt đầu bằng .hoặc nằm trong các thư mục có tên bắt đầu ., hãy xóa dotglobkhỏi shoptdòng.

    Các tệp và thư mục có tên bắt đầu .thường được sử dụng cho siêu dữ liệu (xem phần "Khởi chạy Shotwell với Danh sách tên tệp hình ảnh" ở trên). Mặt khác, nếu bạn muốn chắc chắn rằng bạn có tất cả mọi thứ, hoặc nếu thiếu thứ gì đó không thể giải thích được mà bạn khá chắc chắn là có, thì nên giữ lại dotglob.

  • Nếu bạn muốn chỉ bao gồm tập tin mà kết thúc trong chính xác .cr2nhưng không trường hợp biến thể ( .CR2, .Cr2.cR2), sau đó bạn nên loại bỏ nocaseglob. Vì tình huống của bạn liên quan đến khôi phục dữ liệu và Shotwell sẽ không hiển thị cho bạn bất kỳ tệp nào bạn đã bỏ lỡ khi mở thư mục liên kết tượng trưng - đó là điểm chính của phương pháp này - sau tất cả - bạn có thể sẽ muốn giữ lại nocaseglob.

Làm cho nó thực thi được.

Chạy lệnh này để đánh dấu tập lệnh thực thi của bạn:

chmod +x ~/make-symlinks

Chạy nó tại nguồn và vượt qua đích làm đối số.

Sau đó thay đổi thư mục thành thư mục nguồn, tức là thư mục cấp cao nhất có chứa các hình ảnh. Ví dụ: nếu chúng nằm trong Picturesthư mục con của thư mục chính của bạn, bạn sẽ chạy:

cd ~/Pictures

Đây là nơi bạn sẽ chạy tập lệnh. Truyền thư mục đích đến tập lệnh dưới dạng đối số dòng lệnh.

Ví dụ: nếu bạn muốn một thư mục được gọi cr2ssẽ được tạo trên Bàn làm việc của bạn để chứa các liên kết tượng trưng, ​​hãy chạy:

~/make-symlinks ~/Desktop/cr2s

Hoặc nếu bạn chỉ muốn thư mục đó trực tiếp trong thư mục nhà của bạn:

~/make-symlinks ~/cr2s

Hoặc nếu bạn có một ổ đĩa được gắn vào /media/you/MyDrivevà bạn muốn tạo một thư mục trên đó được gọi linksđể chứa các liên kết tượng trưng:

~/make-symlinks /media/you/MyDrive/links

Nhưng nếu ổ đĩa là /media/you/My Drive(có dấu cách) thì bạn phải sử dụng báo giá. Bất kỳ tác phẩm nào trong số này (chỉ sử dụng một, không chạy tất cả):

~/make-symlinks '/media/you/My Drive/links'
~/make-symlinks /media/you/'My Drive'/links
~/make-symlinks /media/you/My\ Drive/links

Nhưng nếu bạn sử dụng ~cho thư mục chính của mình, đừng trích dẫn rằng:

~/make-symlinks ~/'Two Words'   # good
~/make-symlinks ~/Two\ Words    # good
~/make-symlinks '~/Two Words'   # BAD, because ~ doesn't get expanded

make-symlinkstạo thư mục đích cho bạn nếu nó không tồn tại, giống như nó tạo các thư mục con bên trong nó. Tuy nhiên, nó vẫn hoạt động nếu đích đã tồn tại.

Bạn thậm chí có thể chạy nó nhiều lần và vượt qua cùng một thư mục đích (ví dụ: nếu bạn làm gián đoạn nó với Ctrl+ C), mặc dù bạn sẽ gặp failed to create symbolic linklỗi cho các liên kết tượng trưng đã tồn tại và điều đó có thể gây nhầm lẫn.

Bạn có thể không muốn chuyển tên của một thư mục đã tồn tại và chứa các tệp không liên quan (như thư mục chính của bạn) đến make-symlinks. Nếu bạn làm như vậy, bạn có thể mong đợi một loạt các liên kết tượng trưng và thư mục con sẽ được tạo trong đó. Bạn có thể muốn sử dụng một thư mục mới - hoặc một thư mục chưa tồn tại - cho make-symlinks.

Nhập cây symlink mới được tạo vào Shotwell.

Sau khi bạn chạy make-symlinks, chỉ cần nhập thư mục bạn đã chuyển vào thư mục Shotwell, sử dụng một trong các phương thức được đưa ra trong phần đầu tiên của câu trả lời này ( "Mở Thư mục hình ảnh (Bao gồm cả thư mục con) trong Shotwell" ). Ví dụ: bạn có thể mở Shotwell và kéo thư mục vào.

Vì tất cả các mục trong thư mục là các liên kết tượng trưng đến .cr2các tệp hoặc thư mục chứa chúng, không có loại tệp nào khác, Shotwell không nên xem bất kỳ tệp nào khác.


5

Shotwell sẽ quay vòng qua tất cả các hình ảnh được tìm thấy trong mọi thư mục nơi một hình ảnh được mở, do đó, việc sử dụng find -name '*.cr2' -exec shotwell '{}' +như tôi đề xuất một cách chính xác không thực sự hữu ích. Vì cài đặt của Shotwell khá hạn chế, cách duy nhất tôi có thể nghĩ là chỉ mở các tệp bạn muốn là tự di chuyển các tệp sang một thư mục mới.

Bạn có thể sử dụng findcho điều đó:

mkdir ~/cr2files
find -type f -iname '*.cr2' -not -path './dir/*' -exec cp -v -- '{}' ~/cr2files \;

Thay thế cpbằng mvnếu bạn muốn tránh tạo các tệp trùng lặp.

Ghi chú:

  • mkdir ~/cr2files tạo một thư mục mới trong thư mục nhà của bạn
  • find tìm kiếm đệ quy từ thư mục hiện tại trở xuống qua cây
  • -type f chỉ tìm kiếm tập tin
  • -iname tìm kiếm các tập tin theo tên, bỏ qua trường hợp
  • '*.cr2'tên kết thúc bằng .cr2- sử dụng dấu ngoặc kép để ngăn vỏ mở rộng toàn cầu trước khi nó được chuyển đếnfind
  • -not -path './dir/*'sẽ loại trừ nội dung của thư mục dirkhỏi kết quả
  • {} đại diện cho các đường dẫn của các tập tin được tìm thấy
  • --sau đó cplà bảo cpkhông chấp nhận bất kỳ tùy chọn nào khác, điều này tránh mọi tên tập tin bắt đầu -gây ra sự cố

Sau đó, bạn có thể mở bất kỳ tệp nào trong thư mục mới bằng Shotwell và duyệt qua tất cả chúng


Tại sao điều này cũng mở các tệp .jpg và .png trong thư mục? Tôi thấy rằng nó chỉ định * .cr2? Làm cách nào để có được nó chỉ nhìn vào các tệp .cr2 khi tôi nhấn mũi tên trái trên shotwell? Nếu tôi sử dụng \ thay vì +, không có gì xảy ra :(
user285884

Oh! đây là một vấn đề @ user285884 Tôi xin lỗi, shotwell chu kỳ thông qua tất cả những hình ảnh mà nó tìm thấy trong thư mục ... cho tôi xem liệu tôi có thể tìm ra một con đường xung quanh nó ...
Zanna

@ user285884 đã được chỉnh sửa, nhưng tôi không thể tìm ra một giải pháp tao nhã :(
Zanna

1
ok, cảm ơn vì sự nỗ lực Điều gì về điều này, tôi tìm kiếm trong thư mục cho các tệp .cr2 và di chuyển chúng vào một thư mục riêng gọi cr2files. Tôi đã thực hiện nó trong một thư mục con bằng cách sử dụng mv * .cr2 ../cr2files/ và nó đã hoạt động!. Tuy nhiên, làm thế nào để tôi làm điều này và chỉ định những tập tin cần xem xét? Một cái gì đó như "hey linux xem các thư mục 1-10 cho các tệp .cr2 và di chuyển nó vào thư mục cr2files"? Cảm ơn Zanna
dùng285884

1
tốt cho một số bối cảnh về nơi tôi đang có. Tôi bị mất một vài hình ảnh. Vì vậy, tôi đã thực hiện một photorec và nó đã cho tôi một khối lượng thư mục, đủ để lấp đầy toàn bộ ổ cứng của tôi. Vì vậy, tôi muốn tìm trong tất cả các thư mục trong ổ cứng của mình ngoại trừ một thư mục vì tệp đó có rất nhiều tệp .cr2 mà tôi biết không phải là thư mục tôi đang tìm kiếm. Vì vậy, tôi muốn linux đi qua tất cả các thư mục ngoại trừ một thư mục. Tôi không chắc mã của bạn làm điều đó. {} Làm gì? Ngoài ra "-" sau -v? Cảm ơn Zanna!
dùng285884

1

Tùy chọn 1 - Sử dụng xargskhi tên tệp chứa khoảng trắng

Như các bình luận bên dưới đã chỉ ra, sử dụng back ticks(Tùy chọn 3 bên dưới) sẽ bị hỏng khi tên tệp chứa khoảng trắng. Phương pháp an toàn hơn khi sử dụng findlệnh và chuyển đầu ra sang shotwellsử dụng xargstùy chọn trông như thế này:

find . -name "*.cr2" -print0 | xargs -0 shotwell

Các -print0lá cờ nói tìm để sử dụng \0(null ký tự) delimiters giữa tên tập tin, và các -0lá cờ nói xargsđể mong đợi những \0dấu phân cách.

Tín dụng cho các câu trả lời tuyệt vời được tìm thấy ở đây ( Cách liệt kê danh sách các tệp được trả về bằng lệnh find ) trên Stack Overflow.

Tùy chọn 2 - Sử dụng -execkhi tên tệp chứa khoảng trắng

Như một bình luận dưới đây chỉ ra, -exectùy chọn cũng hỗ trợ tên tệp chứa khoảng trắng. Các ý kiến ​​khác dưới đây chỉ ra điều này phá vỡ khi số lượng tệp vượt quá Điều này sẽ giống như thế này:

find . -name "*.cr2" -exec shotwell {} +

Tùy chọn 3 - Khi tên tệp không có dấu cách

Vào thời xưa, trước khi tên tệp có khoảng trắng và dài 256 ký tự, tùy chọn này hoạt động tốt. Bạn sẽ tìm thấy tùy chọn này được đề cập trên nhiều trang web khác nhưng bạn không nên sử dụng tùy chọn này . Trước đây, sử dụng findlệnh và truyền đầu ra shotwelllà phương pháp đơn giản nhất:

shotwell `find . -name "*.cr2"`

Điều này bắt đầu findtừ thư mục hiện tại và bao gồm tất cả các thư mục con:

  • Lưu ý việc sử dụng back tickvà không trích dẫn đơn 'ở trên. Sử dụng back-ticks tương tự như cụm từ kèm theo $(...)trong bash.
  • Đối số đầu tiên .đưa ra findmột điểm bắt đầu là thư mục hiện tại. Bạn có thể vượt qua /home/$USER/Pictureshoặc một cái gì đó khác thay vì ..
  • Đối số thứ hai -namecho biết tìm kiếm tên tệp (không phải thư mục).
  • Kỹ thuật này hoạt động cho tất cả các lệnh, không chỉ shotwell. tức là Bạn có thể sử dụng nó cho cat, head, tailvà hầu hết các lệnh Linux phổ biến khác.

Sử dụng backticks là một kiểu nhăn mặt, cộng với nó có vấn đề với việc tách từ. Tôi khuyên bạn nên đổi nó thành ống với xargs và sử dụng -0tất cả tên tệp sử dụng chuỗi NULL làm dấu phân cách
Sergiy Kolodyazhnyy

Vấn đề với cách tiếp cận trong câu trả lời này là nó làm sai khi bất kỳ tên tệp hoặc bất kỳ tên nào của thư mục chứa tệp, có khoảng trắng. Lưu ý rằng, mặc dù nhiều người thích $( )cú pháp thay thế lệnh hơn cú pháp thay thế lệnh backtick, nhưng điều đó không liên quan đến vấn đề này - cả hai đều thất bại theo cùng một cách. @Serg Tôi đề nghị đăng một câu trả lời mới về cách thực hiện xargs. (Đưa sự thay thế vào" " cũng sẽ không hiệu quả: tất cả các findkết quả sẽ được thông qua dưới dạng một đối số duy nhất.)
Eliah Kagan

Tôi cũng thấy xargs tùy chọn Stack Overflowkhi viết câu trả lời này. Tôi cũng sẽ mở rộng với tùy chọn đó. Thật không may, tôi đã phải khởi động với Windows 8 sáng nay để sửa lỗi NTFSphân vùng bị hỏng nên việc kiểm tra rất khó khăn. Tôi sẽ cập nhật câu trả lời sau. Cảm ơn bạn đã chỉ ra :)
WinEunuuchs2Unix

Tại sao không chỉ sử dụng -exec?
Zanna

@Zanna Tôi cũng sẽ thêm -exectùy chọn :)
WinEunuuchs2Unix

-2

Tôi không biết shotwell thậm chí đã mở các tệp thô. Tôi chắc chắn bạn có thể nhận được nhiều dặm hơn với digikam hoặc darktable. Digikam đi kèm với một số thành phần Kde và là một trình quản lý ảnh khá tốt. Darktable đi kèm với khả năng chỉnh sửa không phá hủy rất tốt.


Bạn có thể mở rộng câu trả lời này (bằng cách chỉnh sửa ing) để bao gồm thông tin chi tiết về cách sử dụng Digikam (hoặc Darktable) để duyệt qua chỉ .cr2các tệp trong một thư mục không? Nếu vậy, thì điều này có thể có giá trị, vì người đăng ban đầu đã gặp sự cố khi Shotwell chỉ hiển thị các .cr2tệp. Mặc dù tôi đã thêm các cách tiếp cận bổ sung vào câu trả lời của mình để có thể sử dụng Shotwell để chỉ duyệt các tệp đó và không có tệp nào khác, tôi khá nghi ngờ Shotwell không phải là công cụ tốt nhất cho việc này.
Eliah Kagan
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.