Saya ingin shotwell membuka semua file .cr2 dalam folder dan semua subfoldernya, baris perintah apa yang saya gunakan?


9

Sesuatu seperti

shotwell *.cr2 ./

Itu tidak berfungsi, tetapi pada dasarnya saya ingin menggunakan shotwell untuk membuka semua file yang diakhiri dengan .cr2dan dalam direktori saat ini (termasuk subfolder)

Konteksnya adalah bahwa saya kehilangan foto yang saya ambil pada kamera saya yang telah saya hapus dari kartu memori saya.

Ada thumbnail untuk mereka di "gambar hilang" shotwell tapi saya tidak dapat menemukannya. Jadi saya pikir saya akan lari photorecuntuk mencoba dan menemukan mereka. Akibatnya photorec memberi saya banyak folder dan file, cukup sehingga memenuhi hard drive saya. Alih-alih menyaring semua file satu per satu, saya memutuskan untuk mencari file .cr2 pada hard drive saya, sambil menghindari folder tertentu Photogsyang saya tahu tidak memilikinya karena itu bukan bagian dari photorecdump data.


@EliahKagan lihat komentar (yang berlanjut ke obrolan!) Untuk detail di sini . Saya tidak yakin apakah dan bagaimana mengedit pertanyaan, jadi tolong beri tahu, mengingat Anda membuat jawaban yang indah
Zanna

@ user285884 Pengeditan terbaru untuk jawaban saya mencakup prosedur terperinci untuk membangun pohon tautan simbolik hanya ke file .cr2, yang kemudian dapat dibuka di Shotwell (dan beberapa metode lain). Ini harus mengatasi masalah melihat file ekstra, non-.cr2 di Shotwell serta masalah tidak memiliki cukup ruang pada perangkat tujuan untuk memindahkan atau menyalin file. Saya tidak yakin, dari obrolan yang relevan , apakah Anda sudah menyelesaikan ini.
Eliah Kagan

Jawaban:


6

Biasanya, Anda hanya perlu membuka Shotwell dan menariknya ke dalam folder.

Jika perlu, Anda dapat membuat shell membuat daftar file CR2 dan memberi tahu Shotwell untuk hanya membuka file-file itu. Kadang-kadang itu mungkin yang Anda inginkan, tetapi dalam hal ini tidak melakukan apa yang Anda butuhkan karena perilaku Shotwell - dalam beberapa keadaan lain, fitur - untuk secara otomatis menampilkan file gambar lain (dari semua jenis) yang berada di folder yang sama dengan gambar yang Anda buka.

Untuk memastikan Shotwell hanya tahu tentang gambar yang Anda minati, Anda bisa mengkloning pohon direktori di tempat lain, hanya menyalin .cr2file dan folder yang berisi mereka, tetapi tidak ada yang lain. Itu mungkin membutuhkan ruang tambahan yang besar. Jadi pendekatan lain adalah membangun hierarki tautan simbolik - di mana alih-alih memiliki pohon direktori baru salinan dari.cr2 file asli Anda, Anda memiliki pohon direktori symink baru untuk mereka. Ini membutuhkan ruang jauh lebih sedikit.

Jawaban ini mencakup semua pendekatan itu.

Membuka Folder Gambar (Termasuk Subfolder) di Shotwell

Shotwell sendiri memberi Anda dua cara untuk membuka seluruh pohon direktori foto. Jika ini bekerja untuk Anda, maka Anda tidak perlu melakukan apa pun yang cerdik di baris perintah atau bahkan menggunakannya sama sekali. Jika tidak, Anda mungkin akan melakukan ini sehubungan dengan teknik lain. (Misalnya, jika Anda akhirnya membuat direktori baru symlink atau salinan .cr2file Anda, Anda dapat menggunakan salah satu cara ini untuk membukanya.)

Cara 1: Cukup buka seluruh folder di Shotwell.

Di Shotwell, di menu File , klik Impor dari Folder . Kemudian pilih folder tempat Anda ingin mengimpor gambar. Ini tidak akan terbatas pada .cr2file, tetapi jika Anda membuka file dari beberapa subfolder yang berisi .cr2gambar yang dibuat dari kamera digital, maka kemungkinan besar hanya file-file itu saja yang ada.

Cuplikan layar item menu Impor dari Folder di menu File di Shotwell.

Lihat jawaban Jakob untuk Perlihatkan semua gambar secara rekursif (termasuk sembarang subfolder) untuk informasi lebih lanjut.

Cara 2: Seret folder ke Shotwell.

Dengan sebagian besar lingkungan desktop dan browser file, Anda juga dapat membuka Shotwell dan menyeret folder yang berisi gambar Anda ke jendela Shotwell. Seperti Impor dari Folder , ini adalah cara lain yang disarankan Shotwell untuk membuka foto.

Cuplikan layar saya menyeret folder Desktop saya ke Shotwell untuk mengimpor gambar yang dikandungnya.

Saat Anda menyeret dari jendela browser file atau desktop ke Shotwell, Anda dapat menyeret ke perpustakaan tertentu. Atau jika Anda tidak memiliki banyak pustaka yang diatur, Anda bisa menyeret dasarnya di mana saja dan berfungsi. (Anda bahkan tidak perlu menyeret ke panel kiri.)

Metode ini sangat nyaman, dan sama kuatnya dengan memilih folder secara manual (dengan File > Impor dari Folder , seperti dijelaskan di atas). Ketika Anda membuka file atau folder menggunakan salah satu dari metode ini , Shotwell memberi Anda opsi untuk membuka foto tanpa menyalinnya ke pustaka.

Cuplikan layar kotak dialog di Shotwell yang meminta pengguna untuk memilih antara menyalin gambar ke lokasi perpustakaan Shotwell mereka, atau mengimpornya di tempat, tanpa menyalin apa pun.

Untuk mengimpor tanpa menyalin, klik Impor di Tempat alih-alih Salin Foto .


Meluncurkan Shotwell dengan Daftar Nama File Gambar

Jika karena alasan tertentu Anda ingin atau perlu melakukan ini dengan menjalankan perintah di Terminal, Anda dapat menjalankan shotwellperintah dan meneruskan nama file masing-masing gambar sebagai argumen. Globstar membuatnya mudah:

shopt -s globstar
shotwell **/*.cr2

Itu membuka .cr2file yang terletak di mana saja di direktori saat ini. Itu berbeda dari menjalankan Shotwell dan kemudian menyeret folder ke dalam, dalam hal itu Shotwell hanya akan mencoba untuk mengimpor file yang namanya Anda berikan. Namun, karena Shotwell sering memperlihatkan file gambar lain dari folder yang sama dengan file yang Anda suruh dibuka, ini mungkin tidak memadai untuk kebutuhan Anda. (Dan informasi lebih lanjut yang Anda berikan tentang masalah Anda menunjukkan bahwa itu bukan masalah . Lihat di bawah untuk alternatif.)

Ini tidak termasuk file atau subfolder yang namanya dimulai dengan. . Namun, jika Anda memiliki file CR2 yang namanya dimulai dengan titik, maka sebagian besar waktu Anda mungkin tidak ingin membukanya di Shotwell. Kecuali Anda sengaja memberi nama file atau folder Anda dengan cara ini, filefile dengan gambar atau ekstensi nama file dokumen lebih cenderung menjadi file metadata daripada gambar atau dokumen yang sebenarnya. Misalnya, macOS sering menambahkan file seperti itu (misalnya, ._kittens.cr2untuk gambar aktual kittens.cr2) ketika mengakses media eksternal (termasuk flash drive dan kamera digital).

Jika Anda juga ingin menemukan file yang namanya dimulai .atau ada di folder yang namanya dimulai. , maka aktifkan dotglob juga. Anda dapat melakukan ini dengan shopt -s dotglobatau dengan melewati keduanya globstardan dotglobke shoptbuiltin:

shopt -s globstar dotglob

Secara default, gumpalan bersifat case-sensitive. Tapi Anda mungkin ingin untuk mencocokkan nama file kasus-insensitively , sehingga untuk membuka file berakhiran .cr2, .Cr2, .cR2, dan .CR2. Untuk melakukan itu, baik:

  • Aktifkan nocaseglob dengan menjalankan shopt -sdengan nocaseglobbaik dengan sendirinya atau dengan pilihan shell lainnya. Misalnya, untuk dijalankan shotwelldi semua .cr2file, cari case-insensitive dan sertakan .-file dan file di .-directories:

    shopt -s globstar dotglob nocaseglob
    shotwell **/*.cr2
    
  • Atau , gunakan .[cC][rR]2alih-alih .cr2dalam pola glob Anda sendiri. Misalnya, ini mencapai yang sama seperti di atas:

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

    Perhatikan bahwa sensitivitas case sepenuhnya terpisah dari apakah .file dan folder cocok atau tidak . Anda dapat menghapus dotglobdari contoh di atas dan mereka masih bisa peka terhadap huruf besar-kecil.

Untuk menentukan direktori daripada hanya menggunakan direktori saat ini, letakkan namanya dan /sebelum **/*.cr2glob. Misalnya, mengganti shotwellperintah di atas dengan yang ini akan membuka semua .cr2file di dalam Picturessubdirektori direktori home Anda:

shotwell ~/Pictures/**/*.cr2

Berbeda dengan perintah pertama yang menggunakan direktori Anda saat ini, di mana pun Anda menjalankan perintah itu, Anda akan memberi tahu Shotwell untuk membuka file yang sama.

Pengujian

Jika Anda benar-benar harus menggunakan terminal untuk ini, maka saya kira itu mungkin bagian dari sesuatu yang lebih kompleks. Jika Anda suka, Anda dapat menguji perintah seperti sebelum benar-benar menjalankan mereka dengan mengganti shotwelldengan printf '%s\n'. Alih-alih meneruskan nama file ke Shotwell, itu daftar mereka satu per baris. Misalnya, di komputer saya:

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

Mematikan Globstar dan Opsi Shell Lainnya

Opsi shell globstar telah diaktifkan untuk berfungsi, seperti yang dilakukan oleh shopt -s globstarperintah (di atas). Jika sudah diaktifkan, maka Anda tidak perlu banyak perintah. Dan Anda hanya perlu mengatur globstar sekali per instance shell.

Anda dapat mematikan globstar dengan menjalankan:

shopt -u globstar

Dan Anda dapat memeriksa apakah globstar hidup atau mati dengan menjalankan:

shopt globstar

Jika Anda menggunakan globstar dalam sebuah skrip, Anda harus mempertimbangkan untuk mematikannya kembali jika mungkin ada kode yang muncul setelahnya dalam skrip yang sama yang tidak ditulis dengan globstar dalam pikiran. Misalnya, menulis **ketika yang Anda maksud *biasanya tidak ada masalah ketika globstar dinonaktifkan, tetapi dengan globstar dihidupkan, itu dapat menyebabkan masalah serius dengan membuat perintah memengaruhi jauh lebih banyak file daripada yang dimaksudkan seseorang.

Demikian pula, jika Anda menggunakan dotglob atau nocaseglob dan Anda juga ingin mematikannya, Anda dapat melakukannya dengan shopt -u dotglobdan shopt -u nocaseglob, masing-masing. Anda juga dapat melewatkan beberapa opsi shell shopt -uuntuk menghapusnya sekaligus. Misalnya, untuk mematikan globstar, dotglob, dan nocaseglob:

shopt -u globstar dotglob nocaseglob

Dibandingkan dengan globstar, ada lebih sedikit kesalahan serius yang mungkin Anda lakukan karena Anda lupa Anda membiarkan dotglob atau nocaseglob aktif. Tetapi orang lain (termasuk orang yang Anda hubungi di situs seperti Ask Ubuntu) biasanya menganggap dotglob dan nocaseglob dinonaktifkan ketika mereka menyarankan perintah untuk Anda gunakan, kecuali jika Anda memberi tahu mereka sebaliknya.

Untuk informasi lebih lanjut tentang opsi-opsi shell terkait-glob ini (dan juga pada gumpalan pada umumnya ), lihat manual referensi bash . Mereka semua tercakup terutama dalam 4.3.2 The Shopt Builtin . Untuk globstar, lihat juga 3.5.8.1 Pencocokan Pola . Untuk dotglob, lihat juga 3.5.8 Nama file Ekspansi .


Membangun Pohon Direktori Baru

Karena dalam kasus Anda Anda tampaknya benar-benar membutuhkan Shotwell untuk hanya menampilkan .cr2file, Anda memiliki non- .cr2file dalam folder yang sama dengan .cr2file, dan penelusuran gambar di Shotwell secara otomatis menawarkan file-file itu juga , sepertinya Anda harus memiliki folder yang tidak mengandung file gambar selain .cr2file yang Anda coba buka.

Memindahkan file, seperti yang Anda sarankan , adalah salah satu pendekatan, tetapi saya sarankan sebagai gantinya menyalin file atau, lebih baik, membuat tautan simbolis ke file (lihat juga FOLDOC ), karena:

  • Jika Anda memindahkan file di seluruh perangkat, itu memerlukan penyalinan, jadi dalam hal ini bergerak tidak lebih cepat.
  • Jika Anda memiliki ruang, sering kali merupakan ide yang baik untuk menyimpan folder yang belum dimodifikasi dari semua yang Anda mulai sampai Anda puas bahwa apa yang Anda lakukan benar sesuai dengan kebutuhan Anda. Jelas ini tidak selalu berlaku atau praktis. Tetapi dalam kasus Anda, file-file ini adalah hasil dari operasi pemulihan data. Mungkin berguna untuk menyimpan catatan yang mudah dibaca tentang apa yang dipulihkan dan dari mana.
  • Jika Anda memilih untuk membuat tautan simbolik, jumlah ruang tambahan yang digunakan sangat kecil . (Namun, jika disk target sepenuhnya penuh , Anda masih perlu mengosongkan ruang di atasnya - atau menggunakan disk target lain - untuk membuat symlink.)

Ada keputusan lain untuk Anda buat juga. Apakah Anda membuat semua entri baru (apakah itu salinan atau symlink) di direktori yang sama, meratakan hierarki file? Atau apakah Anda membuat direktori di tujuan yang sesuai dengan masing-masing direktori di sumber yang mengandung setidaknya satu .cr2file?

  • Meratakan hierarki file memungkinkan Anda melihat semua file sekaligus, dengan mudah. Secara khusus, mudah untuk melihat nama dan ukuran file sekaligus, serta untuk memilih kombinasi file dalam browser file grafis.

  • Tetapi juga kehilangan informasi tentang folder tempat mereka berada, yang mungkin berharga (meskipun Anda dapat kembali ke folder asli dan mencarinya di sana jika Anda tidak memindahkan file).

  • Masalah yang lebih besar dengan meratakan hierarki file, adalah apa yang terjadi jika Anda memiliki dua atau lebih file dengan nama yang sama di tempat yang berbeda . Jika Anda meratakan hierarki file, maka tergantung pada bagaimana Anda melakukannya, semua kecuali yang pertama akan gagal disalin (atau ditautkan) dan Anda akan mendapatkan kesalahan atau peringatan, atau semua kecuali salinan terakhir (atau tautan) akan menjadi ditimpa .

    Ini adalah alasan lain saya merekomendasikan menyalin atau membuat symlink daripada memindahkan file. Jika Anda "berhasil" memindahkan banyak file ke file yang sama, Anda telah kehilangan semua kecuali yang terakhir!

Karena kelemahan meratakan semuanya menjadi satu direktori tanpa subdirektori, pendekatan yang saya ambil di sini membangun pohon direktori baru di tujuan.

Cara 1: Menyalin

Saya perlihatkan ini dulu karena ini sedikit lebih sederhana, tetapi saya sarankan Anda membuat tautan simbolik ("Way 2"), terutama jika drive tujuan mungkin tidak memiliki cukup ruang untuk menampung semua file. "Cara 2," yang sedikit lebih rumit, jauh lebih terperinci karena tampaknya ada lebih sedikit sumber daya tentang cara menggunakan teknik itu, itu cara yang saya harapkan kebanyakan orang dalam situasi ini akan lebih suka, dan informasi yang berlaku untuk kedua metode - saran dasar tentang keluar dari ruang di jalur - diberikan di sana daripada di sini.

Bila Anda perlu menyalin pohon direktori dan Anda perlu untuk menyesuaikan operasi copy, Anda harus biasanya menggunakan rsyncbukan cp. Ini merupakan salah satu dari kasus-kasus itu.

Mengganti srcdengan jalur ke direktori tingkat atas yang berisi semua file CR2 Anda, dan mengganti destdengan nama direktori yang ingin Anda buat yang akan berisi hierarki tautan simbolik ke file CR2, jalankan:

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

Jangan lupa nama /setelah direktori sumber, kecuali jika Anda ingin direktori tingkat atas tambahan dibuat di dalamnyadest . Artinya, jika Anda menghilangkan trailing /, maka rsyncakan membuat direktori tujuan untuk Anda, di dalamnya dest. Sebagai contoh, misalkan srcadalah jalur relatif yang mengandung no /. Kemudian:

  • Dengan src/di rsyncperintah Anda, Anda mendapatkan symlink dest/foo/bar.cr2untuk file tersebut src/foo/bar.cr2.
  • Dengan srcdi rsyncperintah Anda, Anda mendapatkan symlink untuk file tersebut .dest/src/foo/bar.cr2src/foo/bar.cr2

Karena ini bisa membingungkan untuk direktori tingkat atas di mana symlinks akan ditempatkan memiliki nama yang sama dengan direktori top-level yang berisi .cr2file - file yang akan ditunjukkan oleh symlinks, saya sarankan Anda memasukkan /di akhir tujuan nama direktori dalam rsyncperintah Anda . (Dan, untuk direktori sumber, berikan direktori yang kosong, tidak ada, atau didedikasikan untuk tujuan ini. Jika tidak, Anda akan mengacaukan beberapa folder lain.)

Seperti umumnya terjadi ketika Anda melewati nama file atau direktori untuk program baris perintah atau script, jika tujuan atau sumber Anda jalur direktori mengandung ruang kosong (atau karakter diperlakukan khusus oleh shell, seperti \, $, ', dan berbagai tanda baca lainnya), maka Anda harus mengutipnya . Saya telah merinci cara melakukan ini, untuk kasus ruang yang paling umum, dalam "Cara 2" - saran tentang mengutip di bagian itu juga berlaku di sini. Namun, jika Anda tidak yakin bagaimana cara mengutip nama folder, Anda dapat meminta Ubuntu melakukannya untuk Anda hanya dengan menyeret folder tersebut ke dalam Temrminal; path lengkapnya akan disisipkan dengan kutipan yang benar .

Setelah menyalin hanya .cr2file dan folder yang berisi itu, Anda dapat membuka folder tujuan di Shotwell. (Lihat "Membuka Folder Gambar (Termasuk Subfolder) di Shotwell" di atas.) Namun, sebelum menjalankan rsync, saya sarankan Anda memutuskan apakah ingin melewatkan entri yang dimulai dengan .dan jika Anda ingin memasukkan entri dengan akhiran varian-huruf. Jika demikian, Anda harus menjalankan beberapa rsyncperintah yang sedikit berbeda .

Menyesuaikan Penanganan Entri Bertitik dan Sensitivitas Kasus

Anda mungkin ingin menggunakan rsyncperintah berbeda untuk mengubah apakah file dan direktori yang dimulai dengan titik dilewati dan apakah Anda ingin sensitivitas huruf besar atau kecil dalam mencocokkan sufiks .cr2.

Perintah di atas tidak termasuk direktori dan file yang namanya mulai dengan .. Untuk mengecualikan file dan direktori tersebut, letakkan di --exclude='.*/' --exclude='.*'depan semua --includes dan --excludes lainnya. Artinya, gunakan rsyncperintah ini sebagai gantinya (dengan penggantian yang sesuai untuk srcdan dest, tentu saja):

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

The rsyncperintah ditampilkan sejauh ini telah case-sensitive dan tidak akan menyalin file yang berakhir dengan .CR2, .Cr2atau .cR2bukan .cr2. Jika Anda ingin file seperti itu disalin, maka Anda harus memperhitungkannya dengan menggunakan --includepola *.[cC][rR]2sebagai ganti *.cr2.

Perintah ketiga ini tidak peka huruf besar-kecil dan (seperti perintah pertama) tidak melewatkan file dan direktori yang namanya dimulai dengan .:

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

Jika Anda mengambil pendekatan menyalin file rsync, dan Anda tidak yakin dengan perintah mana yang Anda inginkan, saya sarankan menggunakan yang itu jika Anda ingin memastikan tidak ketinggalan apa pun. Namun, Anda harus menyadari bahwa dotfile mungkin mengandung metadata, dan dotfile yang diberi nama seperti gambar mungkin bukan benar-benar gambar. Lihat diskusi tentang dotfile di bagian "Meluncurkan Shotwell dengan Daftar Nama File Gambar" di atas, dan pada dotfile dan sensitivitas case dalam "Way 2" di bawah.

Perintah keempat ini case-sensitive dan (seperti perintah kedua) tidak file melompat dan direktori yang namanya mulai dengan .:

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

Cara 2: Membuat Tautan Simbolik

Inilah yang saya sarankan Anda lakukan, meskipun Way 1 tidak apa-apa jika Anda memiliki cukup ruang pada drive tujuan. Anda tidak harus membaca Way 1 untuk menggunakan ini.

Metode yang disajikan di sini membuat daftar .cr2file dan loop melalui daftar, membuat direktori target sesuai kebutuhan dan mengisi mereka dengan tautan simbolis ke setiap .cr2file.

Ini cukup rumit sehingga saya sarankan untuk memasukkannya ke dalam skrip daripada mengetiknya secara interaktif. Anda dapat meletakkan skrip di mana pun Anda suka, tetapi untuk kenyamanan, saya akan menunjukkan cara melakukannya dengan skrip yang ditempatkan langsung di folder rumah Anda.

Tulis (atau rekatkan) skrip.

Buat file teks make-symlinks,, di folder rumah Anda. Tidak diperlukan ekstensi file.

Anda dapat melakukan ini dengan editor teks apa pun, seperti Vim, Nano, Gedit, atau Leafpad. Namun, jangan gunakan pengolah kata seperti LibreOffice Writer. (Anda bahkan bisa melakukannya dengan menjalankan cat > ~/make-symlinks, menempelkan isi file, dan menekan Ctrl+ Dpada baris baru, jika Anda mau.)

Jika Anda memberi nama skrip itu selain make-symlinks, pastikan untuk menggunakan nama itu saat Anda menjalankan perintah yang menggunakan skrip nanti.

#!/bin/bash

shopt -s globstar dotglob nocaseglob

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

Masukkan itu ke dalam file, dan simpan file tersebut. Script ini menggunakan globstar, fitur Bash yang dijelaskan di atas dalam "Meluncurkan Shotwell dengan Daftar Nama File Gambar" .

Anda dapat mengubah cara menangani entri bertitik dan sensitivitas huruf.

Tergantung pada kebutuhan Anda, Anda mungkin ingin melakukan beberapa perubahan:

  • Jika Anda tidak ingin menyertakan .cr2file yang namanya dimulai .atau berada di direktori yang namanya dimulai ., hapus dotglobdari shoptbaris.

    File dan direktori yang namanya dimulai dengan .sering digunakan untuk metadata (lihat bagian "Meluncurkan Shotwell dengan Daftar Nama File Gambar" di atas). Di sisi lain, jika Anda ingin memastikan Anda memiliki segalanya, atau jika ada sesuatu yang tidak dapat dijelaskan yang Anda yakin benar ada di sana, maka Anda harus menyimpannya dotglob.

  • Jika Anda ingin menyertakan hanya file yang akhir persis .cr2tapi tidak varian kasus ( .CR2, .Cr2, dan .cR2), maka Anda harus menghapus nocaseglob. Karena situasi Anda melibatkan pemulihan data dan Shotwell tidak akan memperlihatkan kepada Anda salah satu file yang Anda lewatkan ketika Anda membuka direktori tautan simbolik - bagaimanapun, itulah inti dari metode ini - Anda mungkin ingin menyimpannya nocaseglob.

Jadikan itu dapat dieksekusi.

Jalankan perintah ini untuk menandai skrip Anda dapat dieksekusi:

chmod +x ~/make-symlinks

Jalankan di sumber dan lewati tujuan sebagai argumen.

Kemudian ubah direktori ke direktori sumber, yaitu folder tingkat atas yang berisi gambar-gambar. Misalnya, jika mereka berada di Picturessubdirektori direktori home Anda, Anda akan menjalankan:

cd ~/Pictures

Di sinilah Anda akan menjalankan skrip. Lewati direktori tujuan ke skrip sebagai argumen baris perintah.

Misalnya, jika Anda ingin direktori yang dipanggil cr2sdibuat di Desktop Anda berisi tautan simbolik, jalankan:

~/make-symlinks ~/Desktop/cr2s

Atau jika Anda hanya ingin direktori itu langsung di folder rumah Anda:

~/make-symlinks ~/cr2s

Atau jika Anda memiliki drive yang terpasang di /media/you/MyDrivedan Anda ingin membuat folder yang dipanggil linksuntuk memuat tautan simbolik:

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

Tetapi jika drive itu /media/you/My Drive(dengan spasi) maka Anda harus menggunakan kutipan. Salah satu dari karya-karya ini (gunakan hanya satu, jangan jalankan semuanya):

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

Tetapi jika Anda menggunakan ~untuk direktori home Anda, jangan mengutip itu:

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

make-symlinksmembuat direktori tujuan untuk Anda jika belum ada, sama seperti itu membuat subdirektori di dalamnya. Namun, itu masih berfungsi jika tujuan sudah ada.

Anda bahkan dapat menjalankannya beberapa kali dan melewati direktori tujuan yang sama (misalnya, jika Anda menginterupsinya dengan Ctrl+ C), meskipun Anda akan mendapatkan failed to create symbolic linkkesalahan untuk symlink yang sudah ada, dan itu bisa membingungkan.

Anda mungkin tidak ingin meneruskan nama direktori yang sudah ada dan berisi file yang tidak terkait (seperti direktori home Anda) make-symlinks. Jika ya, Anda dapat mengharapkan sejumlah symlink dan subfolder dibuat di dalamnya. Anda mungkin ingin menggunakan direktori baru - atau yang belum ada - untuk make-symlinks.

Impor pohon symlink yang baru dibuat ke Shotwell.

Setelah Anda menjalankan make-symlinks, cukup impor direktori yang Anda berikan ke Shotwell, menggunakan salah satu metode yang diberikan di bagian pertama dari jawaban ini ( "Membuka Folder Gambar (Termasuk Subfolder) di Shotwell" ). Misalnya, Anda bisa membuka Shotwell dan menyeret folder masuk.

Karena semua entri dalam folder adalah tautan simbolis ke .cr2file atau direktori yang berisi mereka, tanpa jenis file lain, Shotwell seharusnya tidak melihat file lainnya.


5

Shotwell akan menggilir semua gambar yang ditemukan di setiap direktori tempat gambar terbuka, jadi menggunakan find -name '*.cr2' -exec shotwell '{}' +seperti yang saya sarankan pada awalnya tidak benar-benar membantu. Karena pengaturan Shotwell agak terbatas, satu-satunya cara saya bisa memikirkan untuk hanya membuka file yang Anda inginkan adalah memindahkan file ke direktori baru sendiri.

Anda dapat menggunakannya finduntuk itu:

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

Ganti cpdengan mvjika Anda ingin menghindari membuat file duplikat.

Catatan:

  • mkdir ~/cr2files buat direktori baru di direktori home Anda
  • find cari secara rekursif dari direktori saat ini ke bawah melalui pohon
  • -type f hanya mencari file
  • -iname cari file berdasarkan nama, abaikan case
  • '*.cr2'nama yang diakhiri dengan .cr2- gunakan tanda kutip untuk menghentikan shell yang memperluas bola dunia sebelum diteruskan kefind
  • -not -path './dir/*'akan mengecualikan isi direktori dirdari hasil
  • {} mewakili jalur file yang ditemukan
  • --setelahnya cpadalah untuk memberitahu untuk cptidak menerima opsi lebih lanjut, yang menghindari nama file yang dimulai dengan -menyebabkan masalah

Anda kemudian dapat membuka file apa pun di direktori baru dengan Shotwell dan melihat semuanya


mengapa ini juga membuka file .jpg dan .png di direktori? Saya melihat bahwa ia menentukan * .cr2? Bagaimana saya mendapatkannya hanya dengan melihat file .cr2 ketika saya mendorong panah kiri pada shotwell? Jika saya menggunakan \ bukannya +, tidak ada yang terjadi :(
user285884

oh! ini adalah masalah @ user285884 Maaf, shotwell menggilir semua gambar yang ditemukan dalam direktori ... biarkan saya melihat apakah saya bisa mencari jalan keluarnya ...
Zanna

@ user285884 diedit, tapi saya tidak bisa menemukan solusi yang elegan :(
Zanna

1
ok terima kasih atas usahanya! bagaimana dengan ini, saya mencari di direktori untuk file .cr2 dan memindahkannya ke folder yang disebut cr2files. Saya telah melakukannya dalam satu subfolder dengan menggunakan mv * .cr2 ../cr2files/ dan berhasil !. Namun, bagaimana saya melakukan ini dan menentukan file mana yang harus dilihat? Sesuatu seperti "hei linux lihat folder 1-10 untuk file .cr2 dan pindahkan ke folder cr2files"? Terima kasih Zanna
user285884

1
baik untuk beberapa konteks di mana saya berada. Saya kehilangan beberapa foto. Jadi saya melakukan photorec dan memberi saya banyak folder, cukup untuk mengisi seluruh hard drive saya. Jadi saya ingin melihat semua folder di hard drive saya kecuali satu karena ada satu ton file .cr2 yang saya tahu bukan yang saya cari. Jadi saya ingin linux melalui semua folder kecuali satu. Saya tidak yakin kode Anda melakukan itu. Apa yang dilakukan {}? Juga tanda "-" setelah -v? Zanna terima kasih!
user285884

1

Opsi 1 - Menggunakan xargssaat nama file berisi spasi

Seperti yang ditunjukkan oleh komentar di bawah ini, penggunaan back ticks(Opsi 3 di bawah) akan rusak ketika nama file berisi spasi. Metode yang lebih aman menggunakan findperintah dan meneruskan output shotwellmenggunakan xargsopsi terlihat seperti ini:

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

The -print0flag mengatakan menemukan menggunakan \0(null karakter) pembatas antara nama file, dan -0bendera mengatakan xargsuntuk mengharapkan ini \0pembatas.

Kredit untuk jawaban yang sangat baik yang ditemukan di sini ( Cara mem-pipe daftar file yang dikembalikan dengan perintah find ) di Stack Overflow.

Opsi 2 - Menggunakan -execsaat nama file berisi spasi

Sebagai komentar di bawah ini menunjukkan, -execopsi ini juga mendukung nama file yang mengandung spasi. Komentar lain di bawah ini menunjukkan ini terputus ketika jumlah file melebihi Ini akan terlihat seperti ini:

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

Opsi 3 - Ketika nama file tidak memiliki spasi

Di masa lalu, sebelum nama file memiliki spasi dan menjadi 256 karakter, opsi ini berfungsi dengan baik. Anda akan menemukan opsi ini disebutkan di banyak situs web lain tetapi Anda tidak boleh menggunakan opsi ini . Kembali pada hari itu, menggunakan findperintah dan meneruskan keluaran ke shotwelladalah metode paling sederhana:

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

Ini dimulai finddari direktori saat ini dan termasuk semua sub-direktori:

  • Perhatikan penggunaan back tickdan bukan kutipan tunggal di 'atas. Menggunakan back-ticks mirip dengan menyertakan frase di $(...)dalam bash.
  • Argumen pertama .memberikan findtitik awal yang merupakan direktori saat ini. Anda bisa lulus /home/$USER/Picturesatau yang lainnya ..
  • Argumen kedua -namememberitahu find untuk mencari nama file (bukan direktori).
  • Teknik ini bekerja untuk semua perintah, bukan hanya shotwell. yaitu Anda dapat menggunakannya untuk cat, head, taildan yang paling perintah Linux populer lainnya.

Menggunakan backticks agak disukai, ditambah lagi memiliki masalah dengan pemisahan kata. Saya akan merekomendasikan Anda mengubahnya ke pipa dengan xargs dan menggunakan -0semua nama file menggunakan string NULL sebagai pemisah
Sergiy Kolodyazhnyy

Masalah dengan pendekatan dalam jawaban ini adalah bahwa ia melakukan hal yang salah ketika salah satu nama file, atau nama direktori yang berisi file, memiliki spasi. Perhatikan bahwa, meskipun banyak orang lebih memilih $( )sintaks substitusi perintah daripada sintaks substitusi perintah backtick, itu tidak relevan dengan masalah ini - mereka berdua gagal dengan cara yang persis sama. @Serg Saya sarankan memposting jawaban baru tentang bagaimana melakukannya xargs. (Mengganti substitusi " "juga tidak akan berhasil: semua findhasil akan disahkan sebagai argumen tunggal.)
Eliah Kagan

Saya juga melihat xargsopsi Stack Overflowketika menulis jawaban ini. Saya akan memperluas dengan opsi itu juga. Sayangnya saya harus boot dengan Windows 8 pagi ini untuk memperbaiki NTFSpartisi yang rusak sehingga pengujian bermasalah. Saya akan memperbarui jawabannya nanti. Terima kasih telah menunjukkannya :)
WinEunuuchs2Unix

kenapa tidak pakai saja -exec?
Zanna

@Zanna Saya juga akan menambahkan -execopsi :)
WinEunuuchs2Unix

-2

Saya tidak sadar shotwell bahkan membuka file mentah. Saya yakin Anda mungkin mendapatkan jarak tempuh lebih dengan digikam atau darktable. Digikam hadir dengan beberapa komponen Kde dan merupakan pengelola foto yang cukup bagus. Darktable hadir dengan kemampuan editing non-destruktif yang sangat bagus.


Dapatkah Anda memperluas jawaban ini (dengan mengedit ) untuk memasukkan informasi terperinci tentang cara menggunakan Digikam (atau Darktable) untuk menelusuri hanya .cr2file dalam folder? Jika demikian, maka ini bisa menjadi berharga, karena pembuatnya telah memiliki kesulitan mendapatkan Shotwell untuk menunjukkan hanya satu .cr2file. Meskipun saya telah menambahkan pendekatan tambahan pada jawaban saya untuk memungkinkan penggunaan Shotwell untuk menelusuri hanya file-file itu dan tidak ada yang lain, saya agak curiga Shotwell bukan alat terbaik untuk ini.
Eliah Kagan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.