Shotwell'in bir klasördeki tüm .cr2 dosyalarını ve tüm alt klasörlerini açmasını istiyorum, hangi komut satırını kullanırım?


9

Gibi bir şey

shotwell *.cr2 ./

Bu işe yaramaz, ancak temel .cr2olarak geçerli dizinde ve (alt klasörler dahil) biten tüm dosyaları açmak için shotwell kullanmak istiyorum

Bağlam, fotoğraf makinemde bellek kartımdan sildiğimden beri çektiğim fotoğrafları kaçırmam.

Shotwell'in "eksik görüntülerinde" onlar için küçük resimler var, ancak onları bulamıyorum. Bu yüzden photoreconları bulmaya çalışacağımı düşündüm . Sonuç olarak photorec sabit diskimi doldurmaya yetecek kadar bir klasör ve dosya yükü verdi. Tüm dosyaları tek tek elemek yerine, sabit diskimdeki .cr2 dosyalarını aramaya karar verdim, buna Photogssahip olduğumu bildiğim adı verilen belirli bir klasörden kaçınarak photorecveri dökümünün bir parçası değildi .


@EliahKagan ayrıntı için bir yorum (ki sohbet içine devam!) Bakınız burada . Soruyu düzenleyip düzenlemeyeceğinizden ve nasıl düzenleyeceğinizden emin değilim, bu yüzden böyle güzel bir cevap yarattığınız için lütfen tavsiye verin
Zanna

@ user285884 Cevabımdaki en son düzenlemeler, yalnızca .cr2 dosyalarına sembolik bağlantılar ağacı oluşturmak için ayrıntılı bir yordam içeriyor ve bunlar daha sonra Shotwell'de (ve diğer bazı yöntemlerde) açılabilir. Bu, Shotwell'de ekstra, .cr2 olmayan dosyaları görme ve hedef aygıtta dosyaları taşımak veya kopyalamak için yeterli alan bulunmaması sorununun üstesinden gelmelidir. Henüz çözmediyseniz, ilgili sohbetten emin değildim .
Eliah Kagan

Yanıtlar:


6

Genellikle, Shotwell'i açmak ve klasöre sürüklemek isteyeceksiniz.

Gerekirse, kabuğun CR2 dosyalarının bir listesini oluşturmasını ve Shotwell'e yalnızca bu dosyaları açmasını söyleyebilirsiniz. Bazen istediğiniz şey bu olabilir, ancak bu durumda Shotwell'in davranışı - diğer bazı durumlarda, otomatik olarak içinde bulunan diğer görüntü dosyalarını (her türden) gösterme özelliği nedeniyle ihtiyaç duyduğunuz şeyi yapmadı . açtığınız görüntülerle aynı klasörler.

Shotwell'in yalnızca ilgilendiğiniz görüntülerden haberdar olmasını sağlamak için, dizin ağacını başka bir yerde klonlayabilir, yalnızca .cr2dosyaları ve bunları içeren klasörleri kopyalayabilirsiniz , ancak başka bir şey yapamazsınız . Bununla birlikte, bu önemli ölçüde ek alan gerektirebilir. Başka bir yaklaşım hiyerarşisi oluşturmaktır Yani sembolik bağlantıları yerine yeni bir dizin ağacı sahip olmasının - kopyaları orijinal .cr2dosyalar, sen yeni bir dizin ağacı var için syminks onlara. Bu çok daha az yer kaplar.

Bu cevap tüm bu yaklaşımları kapsamaktadır.

Shotwell'de Bir Görüntü Klasörünü Açma (Alt Klasörler Dahil)

Shotwell'in kendisi, fotoğraf dizini ağacının tamamını açmanın iki yolunu sunar. Bunlar sizin için işe yarayacaksa, komut satırında akıllıca bir şey yapmanız veya hatta hiç kullanmanız gerekmez. Değilse, bunu başka bir teknikle bağlantılı olarak yapabilirsiniz. (Örneğin, yeni bir simge bağlantıları veya .cr2dosya kopyaları dizini oluşturursanız , açmak için bu yollardan birini kullanabilirsiniz.)

1. Yol: Tüm klasörü Shotwell'de açın.

Shotwell'de, Dosya menüsünde, Klasörden Al'ı tıklatın . Ardından, görüntüleri içe aktarmak istediğiniz klasörü seçin. Bu yalnızca .cr2dosyalarla sınırlı kalmayacak , ancak .cr2dijital kameradan oluşturulan resimler içeren birden çok alt klasörden dosya açıyorsanız , büyük olasılıkla bunlar sadece mevcut dosyalar olacaktır.

Shotwell'in Dosya menüsündeki Klasörden Al menü öğesinin ekran görüntüsü.

Bkz Jakob'ın cevabı için yinelemeli tüm resimleri göster (herhangi bir alt klasörleri dahil) Daha fazla bilgi için.

2. Yol: Klasörü Shotwell'e sürükleyin.

Çoğu masaüstü ortamında ve dosya tarayıcısında Shotwell'i açabilir ve resimlerinizi içeren klasörü Shotwell penceresine sürükleyebilirsiniz. Klasörden İçe Aktar gibi , Shotwell'in fotoğrafları açmasını önerdiği başka bir yol budur.

İçerdiği resimleri içe aktarmak için Masaüstü klasörümü Shotwell'e sürüklememin ekran görüntüsü.

Bir dosya tarayıcı penceresinden veya masaüstünüzden Shotwell'e sürüklediğinizde, belirli bir kütüphaneye sürükleyebilirsiniz. Veya ayarlanmış birden fazla kitaplığınız yoksa, temelde herhangi bir yere sürükleyebilirsiniz ve çalışır. (Sol bölmeye sürüklemek zorunda bile değilsiniz.)

Bu yöntem çok kullanışlıdır ve klasörü manuel olarak seçmek kadar güçlüdür ( yukarıda açıklandığı gibi Dosya > Klasörden İçe Aktar ile ). Bu yöntemlerden birini kullanarak dosyaları veya klasörleri açtığınızda , Shotwell size fotoğrafları kitaplığına kopyalamadan açma seçeneği sunar.

Shotwell'deki kullanıcıdan görüntüleri Shotwell kütüphanesinin bulunduğu yere kopyalamak veya herhangi bir kopyalama yapmadan yerinde almak arasında seçim yapmasını isteyen iletişim kutusunun ekran görüntüsü.

Kopyalamadan içe aktarmak için Fotoğrafları Kopyalamak yerine Yerinde İçe Aktar'ı tıklatın .


Görüntü Dosyalarının Bir Listesiyle Shotwell'i Başlatma

Herhangi bir nedenle Terminal'de bir komut çalıştırarak bunu yapmak istiyorsanız veya yapmanız gerekiyorsa, shotwellkomutu çalıştırabilir ve her görüntünün dosya adını bağımsız değişken olarak ona aktarabilirsiniz. Globstar bunu kolaylaştırır:

shopt -s globstar
shotwell **/*.cr2

Bu .cr2, geçerli dizinde herhangi bir yerde bulunan dosyaları açar . Shotwell'i çalıştırıp ardından klasörü sürüklemekten farklıdır, çünkü Shotwell sadece adlarını verdiğiniz dosyaları içe aktarmaya çalışır. Bununla birlikte, Shotwell genellikle açmasını söylediğiniz dosyalarla aynı klasörlerden diğer görüntü dosyalarını gösterdiğinden, bu ihtiyaçlarınız için yeterli olmayabilir. ( Sorununuzla ilgili verdiğiniz daha fazla bilgi bunun olmadığını gösterir . Alternatif için aşağıya bakın.)

Bu , adları ile başlayan dosyaları veya alt klasörleri içermez. . Eğer isimleri bir nokta ile başlar CR2 dosyaları varsa, ancak o zaman çoğu zaman muhtemelen yok zaten Kadıköy'de bunları açmak istiyorum. Dosyalarınızı veya klasörlerinizi bu şekilde kasten adlandırmadıkça, görüntü veya belge dosya adı uzantısına sahip bir nokta dosyasının gerçek görüntü veya belge yerine meta veri dosyası olması daha olasıdır. Örneğin, macOS genellikle harici ortama (flash sürücüler ve dijital kameralar dahil) erişirken bu tür dosyaları ekler (örneğin, ._kittens.cr2gerçek bir resim için kittens.cr2).

Ayrıca adları ile başlayan .veya adları ile başlayan klasörlerde bulunan dosyaları da bulmak. istiyorsanız , dotglob'u da etkinleştirin. Sen ile yapabilirsiniz shopt -s dotglobveya her ikisi geçirerek globstarve dotglobhiç shoptyerleşiğini:

shopt -s globstar dotglob

Varsayılan olarak, globlar büyük / küçük harfe duyarlıdır. Ama isteyebilirsiniz harf duyarsız dosya maç için bu kadar biten açık dosyalara gibi .cr2, .Cr2, .cR2ve .CR2. Bunu yapmak için:

  • Çalıştırarak nocaseglob etkinleştirme shopt -sile nocaseglobkendi başına veya diğer kabuk seçenekleri ile ya. Örneğin, shotwelltüm .cr2dosyalar üzerinde çalıştırmak , büyük / küçük harfe duyarlı olmayan şekilde arama yapmak ve .-dosyalarındaki dosyaları ve dosyaları dahil .etmek için:

    shopt -s globstar dotglob nocaseglob
    shotwell **/*.cr2
    
  • Veya glob kalıbınızın .[cC][rR]2yerine kullanın .cr2. Örneğin, bu yukarıdaki ile aynıdır:

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

    Büyük / küçük harf duyarlılığının, .dosya ve klasörlerin eşleşip eşleşmediğinden tamamen ayrı olduğunu unutmayın . dotglobYukarıdaki örneklerden çıkarabilirsiniz ve yine de büyük / küçük harfe duyarlı olmayabilir.

Yalnızca geçerli dizini kullanmak yerine bir dizin belirtmek için adını ve a'yı glob /önüne koyun **/*.cr2. Örneğin, shotwellyukarıdaki komutu bununla değiştirmek, ana dizininizin alt dizinindeki tüm .cr2dosyaları açacaktır Pictures:

shotwell ~/Pictures/**/*.cr2

Geçerli dizininizi kullanan ilk komutun aksine, bu komutu nerede çalıştırırsanız çalıştırın, Shotwell'e aynı dosyaları açmasını söyleyeceksiniz.

Test yapmak

Eğer bunun için terminali gerçekten kullanmak zorundaysanız, o zaman daha karmaşık bir şeyin parçası olabileceğini tahmin ediyorum. İsterseniz, aslında değiştirerek onları çalıştırmadan önce bu tür komutları test edebilirsiniz shotwellile printf '%s\n'. Dosya adlarını Shotwell'e geçirmek yerine, her satıra bir tane listeler. Örneğin, makinemde:

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

Globstar ve Diğer Kabuk Seçeneklerini Kapatma

Globstar kabuk seçeneğinin çalışması sağlandı, bu shopt -s globstarkomutun (yukarıdaki) yaptığı şeydi . Zaten etkinleştirilmişse, birden fazla komuta ihtiyacınız yoktur. Kabuk örneği için yalnızca bir kez globstar ayarlamanız gerekir.

Globstar'ı çalıştırarak kapatabilirsiniz:

shopt -u globstar

Ve globstar'ın açık olup olmadığını kontrol ederek çalıştırabilirsiniz:

shopt globstar

Bir komut dosyasında globstar kullanıyorsanız, daha sonra globstar göz önünde bulundurulmayan aynı komut dosyasında gelen kodlar varsa onu kapatmayı düşünmelisiniz. Örneğin, globstar devre dışı bırakıldığında **demek istediğinizde yazmak *genellikle sorun değildir, ancak globstar açıkken, bir komutun amaçlanandan çok daha fazla dosyayı etkilemesi ciddi sorunlara neden olabilir.

Benzer şekilde, dotglob veya nocaseglob kullandıysanız ve onları da kapatmak istiyorsanız , sırasıyla shopt -u dotglobve ile yapabilirsiniz shopt -u nocaseglob. shopt -uBunların ayarını aynı anda kaldırmak için birden fazla kabuk seçeneği de iletebilirsiniz . Örneğin, kapatmak globstar, dotglobve nocaseglob:

shopt -u globstar dotglob nocaseglob

Globstar ile karşılaştırıldığında, dotglob veya nocaseglob'u bıraktığınızı unuttuğunuz için yapabileceğiniz daha az ciddi hata var. Ancak başkaları (Ask Ubuntu gibi sitelerde danıştığınız kişiler dahil), aksi belirtilmedikçe, kullanmanız için komutlar önerdiklerinde genellikle dotglob ve nocaseglob'un devre dışı olduğunu varsayar.

Bu küreyle ilgili kabuk seçenekleri (ve genel olarak küreler hakkında ) hakkında daha fazla bilgi için bash başvuru kılavuzuna bakın . Hepsi 4.3.2 The Shopt Builtin'de kaplıdır . Globstar için ayrıca bkz . 3.5.8.1 Kalıp Eşleme . Dotglob için ayrıca bkz . 3.5.8 Dosya Adı Genişletme .


Yeni Dizin Ağacı Oluşturma

Sizin durumunuzda , yalnızca dosyaları göstermek için Shotwell'e gerçekten ihtiyacınız var gibi göründüğünden .cr2, .cr2dosyalarla aynı klasörlerde .cr2dosyalarınız olmadığı ve Shotwell'de görüntü tarama otomatik olarak bu dosyaları da sunduğundan , bir klasöre sahip olmanız gerekecek gibi görünüyor. .cr2açmaya çalıştığınız dosyalardan başka resim dosyası içermiyor .

Önerdiğiniz gibi dosyaları taşıma , bir yaklaşım olmakla birlikte, bunun yerine ya tavsiye kopyalama dosyaları veya daha iyi, yapım sembolik bağlantıları dosyalarına (ayrıca bkz FOLDOC ,) çünkü:

  • Dosyaları yine de kopyalamayı gerektiren aygıtlar arasında taşıyorsanız, bu durumda taşıma daha hızlı olmaz.
  • Alanınız varsa, yaptığınız şeyin ihtiyaçlarınıza göre doğru olduğundan memnun kalana kadar başladığınız her şeyin değiştirilmemiş bir klasörünü tutmak genellikle iyi bir fikirdir. Açıkçası bu her zaman uygulanabilir veya pratik değildir. Ancak sizin durumunuzda, bu dosyalar bir veri kurtarma işleminin sonucudur. Neyin nereden ve nereden kurtarıldığının kolayca gözden geçirilebilen bir kaydını tutmak yararlı olabilir.
  • Sembolik bağlantılar oluşturmayı seçerseniz, tüketilen ek alan miktarı çok azdır . ( Bununla birlikte, hedef disk tamamen doluysa , semboller oluşturmak için üzerinde yer açmanız veya farklı bir hedef disk kullanmanız gerekir.)

Sizin de vermeniz gereken başka bir karar var. Dosya dizinlerini düzleştirerek tüm yeni girişleri (kopya ya da sembolik bağlantı olsun) aynı dizinde mi oluşturuyorsunuz? Veya en az bir .cr2dosya içeren kaynaktaki dizinlerin her birine karşılık gelen hedefte dizinler mi oluşturuyorsunuz ?

  • Dosya hiyerarşisini düzleştirmek, tüm dosyaları aynı anda kolayca görmenizi sağlar. Özellikle, dosyaların adlarını ve boyutlarını aynı anda görmek ve grafik dosya tarayıcısında dosyaların herhangi bir kombinasyonunu seçmek kolaydır.

  • Ancak, hangi klasörlerde oldukları hakkında bilgi kaybeder, bu değerli olabilir (ancak orijinal klasöre dönebilir ve dosyaları taşımazsanız orada arayabilirsiniz).

  • Bununla birlikte, dosya hiyerarşisini düzleştirmeyle ilgili en büyük sorun , farklı yerlerde aynı adda iki veya daha fazla dosyanız varsa olur . Dosya hiyerarşisini yassılaştırırsanız, nasıl yaptığınıza bağlı olarak, ilk dosya dışındaki tüm metinler kopyalanamaz (veya bağlanmaz) ve bir hata veya uyarı alırsınız veya son kopya (veya bağlantı) dışındaki tüm öğeler olmak üzerine yazılır .

    Bu, dosyaları taşımak yerine kopyalamayı veya sembolik bağlantılar yapmanızı öneririm. Birden fazla dosyayı aynı dosyaya "başarılı bir şekilde" taşırsanız, sonuncusu dışında tümünü kaybettiniz!

Her şeyi alt dizinler olmadan tek bir dizine düzleştirmenin dezavantajları nedeniyle, burada aldığım yaklaşımlar hedefte yeni bir dizin ağacı oluşturur .

1. Yol: Kopyalama

Bunu önce gösteririm, çünkü biraz daha basit, ama özellikle hedef sürücünün tüm dosyaları tutmak için yeterli alana sahip değilse, bunun yerine sembolik bağlantılar ("Yol 2") oluşturmanızı öneririm. Biraz daha karmaşık olan "Yol 2" çok daha ayrıntılı, çünkü bu tekniğin nasıl kullanılacağı konusunda daha az kaynak var gibi görünüyor, bu durumda çoğu insanın tercih etmesini beklediğim yol ve her iki yöntem için de geçerli olan bilgiler - patikalardaki boşluklardan kaçma hakkında temel tavsiyeler - burada değil, orada verilmektedir.

Bir dizin ağacını kopyalamanız ve kopyalama işlemini özelleştirmeniz gerektiğinde, genellikle rsyncyerine kullanmanız gerekir cp. Bu, o davalardan biri.

Değiştirme srctüm CR2 dosyalarını içeren üst düzey dizini yolunu ve değiştirilmesi destçalıştırmak CR2 dosyalara sembolik bağlantıların bir hiyerarşi içerecek oluşturmak istediğiniz dizinin adı ile:

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

İçinde ek bir üst düzey dizinin oluşturulmasını istemiyorsanız/ , kaynak dizinin adının sonrasını unutmayın . Izleyen atlarsanız olduğunu, daha sonra içerde, hedef dizini yapacaktır . Örneğin, diyelim ki hayır içeren bir bağıl yoldur . Sonra:dest/rsyncdestsrc/

  • İle src/senin içinde rsynckomuta, bir sembolik olsun dest/foo/bar.cr2dosya için src/foo/bar.cr2.
  • İle srcsenin içinde rsynckomuta, bir sembolik olsun dosya için .dest/src/foo/bar.cr2src/foo/bar.cr2

Sembolik bağlantıların göstereceği .cr2dosyaları içeren üst düzey dizin ile aynı ada sahip olacak şekilde yerleştirilecek en üst düzey dizin için kafa karıştırıcı olabileceğinden /, hedefin sonuna rsynckomutunuzdaki dizin adı . (Ve kaynak dizin için, boş, var olmayan veya bu amaca adanmış bir dizin verin. Aksi takdirde, başka bir klasörü karıştırırsınız.)

Eğer bir komut satırı programı veya komut dosyasına bir dosya veya dizinin adını geçtiğinde genellikle olduğu gibi, hedef veya kaynak dizin yolları kabuk gibi tarafından özel olarak ele herhangi bir boşluk (veya karakterleri içeriyorsa \, $, 've çeşitli diğer noktalama işaretleri), o zaman onları alıntı yapmak zorunda kalacak . Bunun nasıl yapılacağını ayrıntılı bir şekilde açıkladım, en yaygın alan için "Yol 2" de - bu bölümde alıntı yapma tavsiyesi burada da geçerlidir. Ancak, bir klasörün adını nasıl alıntılayacağınızdan emin değilseniz, klasörü Temrminal'e sürükleyerek Ubuntu'nun sizin için yapmasını sağlayabilirsiniz; tam yolu doğru tırnak ile yapıştırılacaktır .

Yalnızca .cr2dosyaları ve bunları içeren klasörleri kopyaladıktan sonra , hedef klasörü Shotwell'de açabilirsiniz. (Bkz . Yukarıdaki "Bir Görüntü Klasörünü Açma (Alt Klasörler Dahil) Shotwell'de" ). Ancak, çalıştırmadan önce rsync, ile başlayan girdileri atlamak isteyip istemediğinize .ve büyük / küçük harf değişkeni ekleri içeren girişler eklemek isteyip istemediğinize karar vermenizi öneririz . Öyleyse, biraz farklı bir rsynckomut çalıştırmanız gerekir .

Noktalı Girişlerin İşlenmesini ve Büyük / Küçük Harfe Duyarlılığı Özelleştirme

rsyncNokta ile başlayan dosya ve dizinlerin atlanıp atlanmayacağını ve sonekin eşleştirilmesinde büyük / küçük harf duyarlılığı isteyip istemediğinizi değiştirmek için farklı bir komut kullanabilirsiniz .cr2.

Komut yukarıda yapar dizinleri ve isimleri ile başlar dosyaları dahil .. Koymak tür dosyaları ve dizinleri, dışlamak için --exclude='.*/' --exclude='.*'diğer tüm evvel --includes ve --excludes. Yani, bu rsynckomutu kullanın ( srcve desttabii ki uygun ikamelerle ):

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

rsyncGösterilen komutlar bugüne kadar harf duyarlı olmuştur ve bu son dosyaları kopyalamak olmaz .CR2, .Cr2ya .cR2ziyade .cr2. Bu tür dosyaların kopyalanmasını istiyorsanız, bunun yerine --includedeseni kullanarak bunu hesaba katmanız gerekir .*.[cC][rR]2*.cr2

Bu üçüncü komut harf duyarsız ve (ilk komutu gibi) yok değil dosya ve isimleri ile başlar dizinleri atlamak .:

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

Dosyaları kopyalama yaklaşımıyla yaklaşırsanız rsyncve bu komutlardan hangisini istediğinizden emin değilseniz, hiçbir şeyi kaçırmamaya dikkat etmek istiyorsanız bunu kullanmanızı öneririm . Ancak, nokta dosyalarının meta veri içerebileceğini ve resimler gibi adlandırılmış nokta dosyalarının gerçekte resim olmayabileceğini bilmeniz gerekir. Yukarıdaki "Görüntü Dosya Adları Listesiyle Shotwell'i Başlatma" bölümündeki ve aşağıdaki "2. Yol" daki dotfiles ve büyük / küçük harf duyarlılığı hakkındaki tartışmalara bakın.

Bu dördüncü komut harf duyarsız ve (ikinci komuta benzeri) yapar atlama dosya ve isimleri ile başlar dizinleri .:

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

2. Yol: Sembolik Bağlantılar Oluşturma

Hedef sürücüde yeterli alanınız varsa, Way 1 tamam olsa da, bunu yapmanızı tavsiye ederim. Bunu kullanmak için 1. Yön'ü okumak zorunda değilsiniz.

Burada sunulan yöntem .cr2, gerektiğinde hedef dizinler oluşturarak ve her .cr2dosyaya sembolik bağlantılarla doldurarak , dosyaların bir listesini ve döngüleri listeler .

Bu sadece etkileşimli yazmak yerine bir betiğe koyarak öneririz yeterince karmaşık. Komut dosyasını istediğiniz yere koyabilirsiniz, ancak kolaylık sağlamak için doğrudan ana klasörünüze yerleştirilen komut dosyasıyla nasıl yapılacağını göstereceğim.

Komut dosyasını yazın (veya yapıştırın).

Giriş make-symlinksklasörünüzde bir metin dosyası oluşturun . Dosya uzantısı gerekmez.

Bunu Vim, Nano, Gedit veya Leafpad gibi herhangi bir metin düzenleyicisiyle yapabilirsiniz. Yine de LibreOffice Writer gibi bir kelime işlemci kullanmayın. (Hatta çalıştırarak cat > ~/make-symlinks, dosyanın içeriğini yapıştırarak ve isterseniz yeni bir satıra Ctrl+ basarak da yapabilirsiniz D.)

Komut dosyasına başka bir make-symlinksad verirseniz, daha sonra komut dosyasını kullanan komutları çalıştırdığınızda bu adı kullandığınızdan emin olun.

#!/bin/bash

shopt -s globstar dotglob nocaseglob

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

Bunu dosyaya koyun ve dosyayı kaydedin. Bu komut dosyası, yukarıda "Resim Dosyalarının Bir Listesiyle Shotwell'i Başlatma" bölümünde açıklanan bir Bash özelliği olan globstar'ı kullanır .

Noktalı girişleri ve büyük / küçük harfe duyarlılığı nasıl işleyeceğini değiştirebilirsiniz.

İhtiyaçlarınıza bağlı olarak, bazı değişiklikler yapmak isteyebilirsiniz:

  • .cr2Adları ile başlayan .veya adları ile başlayan dizinlerde bulunan dosyaları dahil etmek istemiyorsanız , satırdan .kaldırın .dotglobshopt

    Adı ile başlayan dosyalar ve dizinler .genellikle meta veriler için kullanılır ( yukarıdaki "Görüntü Dosyalarının Bir Listesiyle Shotwell'i Başlatma" bölümüne bakın). Öte yandan, her şeye sahip olduğunuzdan emin olmak istiyorsanız ya da orada olduğundan emin olduğunuz açıklanamayan bir şey varsa, o zaman devam etmelisiniz dotglob.

  • Eğer eklemek istiyorsanız sadece tam ile biten dosyalar .cr2ama değil durum varyantları ( .CR2, .Cr2ve .cR2), ardından kaldırmak gerekir nocaseglob. Durumunuz veri kurtarma içerdiğinden ve Shotwell , sembolik bağlantılar dizinini açtığınızda kaçırdığınız dosyalardan hiçbirini göstermeyecektir - sonuçta bu yöntemin noktasıdır - muhtemelen tutmak isteyeceksiniz nocaseglob.

Yürütülebilir yapın.

Komut dosyanızı çalıştırılabilir olarak işaretlemek için bu komutu çalıştırın:

chmod +x ~/make-symlinks

Kaynakta çalıştırın ve hedefi bağımsız değişken olarak iletin.

Ardından dizini kaynak dizine, yani resimleri içeren üst düzey klasöre değiştirin. Örneğin, Picturesana dizininizin alt dizinindeyse, şunları çalıştırırsınız:

cd ~/Pictures

Komut dosyasını burada çalıştıracaksınız. Hedef dizini komut dosyasına komut satırı bağımsız değişkeni olarak iletin.

Örneğin, cr2sMasaüstünüzde çağrılan bir dizinin sembolik bağlantıları içermesini istiyorsanız, şunu çalıştırın:

~/make-symlinks ~/Desktop/cr2s

Veya bu dizini doğrudan ana klasörünüzde istiyorsanız:

~/make-symlinks ~/cr2s

Veya sürücünüz takılıysa /media/you/MyDriveve üzerinde linkssembolik bağlantıları içerecek bir klasör oluşturmak istiyorsanız :

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

Ancak sürücü /media/you/My Drive(boşluklu) ise tırnak işareti kullanmalısınız. Bu çalışmalardan herhangi biri (yalnızca birini kullanın, hepsini çalıştırmayın):

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

Ancak ~ana dizininiz için kullanıyorsanız , şunu belirtmeyin:

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

make-symlinkszaten mevcut değilse, sizin için alt dizinler oluşturduğu gibi sizin için hedef dizini oluşturur. Ancak, hedef zaten mevcutsa yine de çalışır.

Hatta birden çok kez çalıştırabilir ve aynı hedef dizini iletebilirsiniz (örneğin, Ctrl+ ile keserseniz C), ancak failed to create symbolic linkzaten mevcut olan ve kafa karıştırıcı olabilecek semboller için hatalar alırsınız .

Muhtemelen zaten var olan ve ilişkisiz dosyalar (ana dizininiz gibi) içeren bir dizinin adını geçmek istemezsiniz make-symlinks. Bunu yaparsanız, içinde bir sürü sembolik ve alt klasör oluşturulmasını bekleyebilirsiniz. Muhtemelen yeni bir dizin - ya da henüz mevcut olmayan bir dizin - kullanmak istiyorsunuz make-symlinks.

Yeni oluşturulan symlink ağacını Shotwell'e aktarın.

Çalıştırdıktan sonra make-symlinks, bu cevabın ilk bölümünde verilen yöntemlerden birini kullanarak ( "Shotwell'de Bir Görüntü Klasörünü Açma (Alt Klasörler Dahil)" ) , kendisine ilettiğiniz dizini Shotwell'e aktarın . Örneğin, Shotwell'i açıp klasörü içine sürükleyebilirsiniz.

Klasördeki tüm girişler, .cr2başka dosya türlerine sahip olmayan dosyalara veya dizinlere sembolik bağlantılar olduğundan , Shotwell diğer dosyaların hiçbirini görmemelidir.


5

Shotwell, bir görüntünün açık olduğu her dizinde bulunan tüm görüntüler arasında find -name '*.cr2' -exec shotwell '{}' +dolaşacaktır , bu yüzden orijinal olarak önerdiğim gibi kullanmak gerçekten yardımcı olmaz. Shotwell'in ayarları oldukça sınırlı olduğundan, yalnızca istediğiniz dosyaları açmayı düşünebilmemin tek yolu, dosyaları kendi başlarına yeni bir dizine taşımaktır.

Bunun için kullanabilirsiniz find:

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

Yinelenen dosyalar oluşturmaktan kaçınmak istiyorsanız cpile değiştirin mv.

Notlar:

  • mkdir ~/cr2files ana dizininizde yeni bir dizin oluşturun
  • find geçerli dizinden ağaç üzerinde aşağıya doğru arama
  • -type f sadece dosyaları ara
  • -iname dosyaları isme göre ara, durumu görmezden gel
  • '*.cr2'ile biten isimler .cr2- kabuğun geçmeden önce kabuğun genişlemesini durdurmak için tırnak işaretleri kullanınfind
  • -not -path './dir/*'dizinin içeriğini dirsonuçlardan hariç tutacak
  • {} bulunan dosyaların yollarını temsil eder
  • --sonra sorunlara neden olan dosya adlarından kaçınarak başka seçenekleri kabul etmemeyi cpsöylemekcp-

Daha sonra Shotwell ile yeni dizindeki herhangi bir dosyayı açabilir ve hepsinde dolaşabilirsiniz.


bu neden dizindeki .jpg ve .png dosyalarını da açar? * .Cr2 belirttiğini görüyorum? Shotwell'de sol oku ittiğimde .cr2 dosyalarına nasıl bakabilirim? Bir + yerine \ kullanırsam hiçbir şey olmaz :(
user285884

ah! bu bir problem @ user285884 Üzgünüm, dizinde bulduğu tüm resimlerde shotwell döngüleri ... bir yolunu bulabilir miyim bakayım ...
Zanna

@ user285884 düzenlendi, ancak zarif bir çözüm bulamıyorum :(
Zanna

1
tamam, çaba için teşekkürler! ne hakkında, ben dizin üzerinden .cr2 dosyaları aramak ve cr2files çağrı ayrı bir klasöre taşımak. Bunu mv * .cr2 ../cr2files/ kullanarak bir alt klasör içinde yaptım ve işe yaradı !. Ancak bunu nasıl yaparım ve hangi dosyalara bakılacağını nasıl belirleyebilirim? "Hey linux .cr2 dosyaları için 1-10 klasörlerine bakın ve cr2files klasörüne taşıyın" gibi bir şey mi? Teşekkürler Zanna
user285884

1
nerede olduğum hakkında bir bağlam için. Birkaç resim kaybettim. Bu yüzden bir fotosel yaptım ve tüm sabit diskimi doldurmaya yetecek kadar bir bot dolusu klasör verdi. Bu yüzden bir tanesi dışında sabit diskimdeki tüm klasörlere bakmak istiyorum, çünkü aradığım dosya olmadığını bildiğim bir ton .cr2 dosyası var. Bu yüzden linux'un biri hariç tüm klasörlerden geçmesini istiyorum. Kodunuzun bunu yaptığından emin değilim. Ne yapar? Ayrıca -v sonra "-"? Teşekkürler Zanna!
user285884

1

Seçenek 1 - xargsDosya adları boşluk içerdiğinde kullanma

Aşağıdaki yorumların belirttiği gibi, back ticksdosya adları boşluk içerdiğinde (aşağıdaki Seçenek 3) kullanıldığında bozulur. findKomutu kullanmak ve çıktıyı seçeneği shotwellkullanmak için daha güvenli bir yöntem xargsşöyle görünür:

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

-print0Bayrak kullanmak bulmak söyler \0(null karakteri) dosya isimleri arasında ayraçları ve -0bayrak söyler xargsbunlar beklemek \0ayraçları.

Stack Overflow'da burada bulunan mükemmel yanıtlara ( find komutu ile döndürülen dosyaların listesi nasıl aktarılır) kredi verin .

Seçenek 2 - -execDosya adları boşluk içerdiğinde kullanma

Aşağıdaki bir yorumun belirttiği gibi, -execseçenek boşluk içeren dosya adlarını da destekler. Aşağıdaki diğer yorumlar, dosya sayısı aşıldığında bu kırılmalara işaret ediyor Bu şöyle görünecektir:

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

Seçenek 3 - Dosya adlarında boşluk yoksa

Eski günlerde, dosya adlarında boşluklar ve 256 karakter uzunluğunda olmadan önce bu seçenek işe yaradı. Bu seçeneği diğer pek çok web sitesinde bulabilirsiniz, ancak bu seçeneği kullanmamalısınız . Gün içinde, findkomutu kullanmak ve çıktıyı iletmek shotwellen basit yöntemdi:

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

Bu find, geçerli dizinden başlar ve tüm alt dizinleri içerir:

  • Kullanımına dikkat back ticktek tırnak değil, 'yukarıda. Geri keneler kullanmak, $(...)bash içindeki ifadeyi kuşatmaya benzer .
  • İlk argüman , geçerli dizin olan bir başlangıç ​​noktası .verir find. Bunun yerine geçebilir /home/$USER/Picturesya da başka bir şey ..
  • İkinci argüman -namebulmayı dosya adlarını (dizinleri değil) aramayı söyler.
  • Bu teknik sadece tüm komutlarda işe yarar shotwell. yani sen için kullanabilirsiniz cat, head, tailve diğer birçok popüler Linux komutları.

Backticks kullanmak biraz kaşlarını çattı, ayrıca kelime bölme ile ilgili sorunları var. Ben boru ile değiştirmek xargs ve -0ayırıcı olarak NULL dizeyi kullanmak tüm dosya adlarını kullanmanızı tavsiye ederim
Sergiy Kolodyazhnyy

Bu yanıttaki yaklaşımla ilgili sorun, dosya adlarından herhangi birinin veya dosyaları içeren dizin adlarının herhangi birinin boşluklara sahip olması yanlış bir şey yapmasıdır. Birçok kişi $( ), backtick komut değiştirme sözdizimine komut değiştirme sözdizimini tercih etse de, bu sorunla ilgili değildir - her ikisi de tam olarak aynı şekilde başarısız olur. @Serg ile nasıl yapılacağı hakkında yeni bir cevap göndermenizi öneririm xargs. (İkameyi koymak " "da işe find
yaramazdı

Bu yanıtı yazarken de bir xargsseçenek gördüm Stack Overflow. Ben de bu seçenekle genişleyeceğim. Ne yazık ki NTFStest sabah sorunlu oldu bu yüzden bozuk bölümü düzeltmek için bu sabah Windows 8 ile önyükleme yapmak zorunda kaldı . Cevabı daha sonra güncelleyeceğim. İşaret ettiğiniz için teşekkürler :)
WinEunuuchs2Unix

neden sadece kullanmıyorsun -exec?
Zanna

@Zanna Ben de -execseçeneği ekleyeceğim :)
WinEunuuchs2Unix

-2

Shotwell'in ham dosyaları bile açtığının farkında değildim. Digikam veya darktable ile daha fazla kilometre yapabileceğinizden eminim. Digikam bazı Kde bileşenleri ile birlikte gelir ve oldukça iyi bir fotoğraf yöneticisidir. Darktable, çok iyi tahribatsız düzenleme özelliklerine sahiptir.


Bu cevabı ( düzenleyerek ) sadece .cr2bir klasördeki dosyalara göz atmak için Digikam (veya Darktable) kullanımı hakkında ayrıntılı bilgi içerecek şekilde genişletebilir misiniz ? Eğer öyleyse orijinal afiş sorun Shotwell göstermeye başlamıştı etti çünkü, o zaman bu, değerli olabilir sadece.cr2 dosyaları. Ben ek yaklaşımlar ekledik rağmen benim cevap doğrusu şiddetle şüpheli Shotwell bunun için en iyi araç değildir, bu mümkün sadece o dosyaları ve hiçbir diğerlerini göz atmak için SHOTWELL kullanmayı yapmak.
Eliah Kagan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.