ショットウェルでフォルダーとそのすべてのサブフォルダー内のすべての.cr2ファイルを開くには、どのコマンドラインを使用しますか?


9

何かのようなもの

shotwell *.cr2 ./

それは機能しませんが、基本的には、shotwellを使用.cr2して、現在のディレクトリで終了し、現在のディレクトリにあるすべてのファイル(サブフォルダーを含む)を開きます

状況としては、カメラで撮った写真のうち、メモリカードから削除した写真が見つからないということです。

ショットウェルの「画像がありません」にサムネイルが表示されていますが、見つかりません。だから私photorecはそれらを探して見つけるために走ると思った。結果として、photorecは私に大量のフォルダとファイルを与え、それが私のハードドライブをいっぱいにした。すべてのファイルを1つずつふるいにかける代わりに、ハードドライブで.cr2ファイルを検索Photogsすることにしましたが、photorecデータダンプの一部ではなかったため、これらのファイルが存在しないことがわかっているという特定のフォルダーを回避しました。


@EliahKaganの詳細については、コメント(チャットも続いています!)を参照してください。質問を編集するかどうか、どのように編集するかはわかりません。このような美しい回答を作成した場合は、アドバイスをお願いします
Zanna

@ user285884私の回答に対する最新の編集には、.cr2ファイルのみへのシンボリックリンクのツリーを構築するための詳細な手順が含まれており、ショットウェル(および他のいくつかの方法)で開くことができます。これにより、Shotwellで余分な非.cr2ファイルが表示される問題と、ファイルを移動またはコピーするための宛先デバイスに十分なスペースがない問題が克服されます。これをまだ解決しているかどうか、関連するチャットからはわかりませんでした。
Eliah Kagan 2017

回答:


6

通常は、Shotwellを開いてフォルダにドラッグするだけです。

必要に応じて、シェルにCR2ファイルのリストを作成させ、それらのファイルのみを開くようにShotwellに指示できます。たまにそれがあなたの望むものかもしれませんが、この場合 Shotwellの振る舞い(他の状況では、機能)にある他の画像ファイル(すべてのタイプの)を自動的に表示するため、必要なことをまったく実行できません開いた画像と同じフォルダ。

Shotwellが関心のある画像のみを認識するようにするには、ディレクトリツリーを別の場所に複製.cr2し、それらを含むファイルとフォルダーのみをコピーして、他には何もコピーしません。ただし、追加のスペースがかなり必要になる場合があります。だから、別のアプローチは、階層構築することであるシンボリックリンクの代わりに、新しいディレクトリツリー持つことの- のコピー元の.cr2ファイルを、あなたはの新しいディレクトリツリー持ちにsyminksそれらを。これははるかに少ないスペースをとります。

この回答はそれらすべてのアプローチをカバーしています。

Shotwellで画像のフォルダー(サブフォルダーを含む)を開く

Shotwell自体には、写真のディレクトリツリー全体を開く2つの方法があります。これらがうまくいくなら、コマンドラインで何か賢いことをしたり、まったく使用したりする必要はありません。そうでない場合は、別の手法に関連してこれを行う可能性があります。(たとえば、シンボリックリンクまたは.cr2ファイルのコピーの新しいディレクトリを作成することになった場合は、次のいずれかの方法でそれを開くことができます。)

方法1:Shotwellでフォルダ全体を開くだけです。

Shotwellの[ファイル ]メニューで、[ フォルダーからインポート ]をクリックします。次に、画像をインポートするフォルダを選択します。これは.cr2ファイルに限定されませんが.cr2、デジタルカメラで作成された画像を含む複数のサブフォルダーからファイルを開く場合、存在する可能性のあるファイルはおそらくそれらのみです。

ShotwellのFileメニューのImport from Folderメニュー項目のスクリーンショット。

詳細については、すべての画像を再帰的表示する(サブフォルダーを含む)に関するJakobの回答を参照してください。

方法2:フォルダーをShotwellにドラッグします。

ほとんどのデスクトップ環境とファイルブラウザーでは、Shotwellを開いて、画像を含むフォルダーをShotwellウィンドウにドラッグすることもできます。フォルダーからインポートと同様に、これはShotwellが写真を開くことをお勧めする別の方法です。

デスクトップフォルダーをShotwellにドラッグして、含まれている画像をインポートするスクリーンショット。

ファイルブラウザウィンドウまたはデスクトップからShotwellにドラッグすると、特定のライブラリにドラッグできます。または、複数のライブラリーをセットアップしていない場合は、基本的にどこにでもドラッグするだけで機能します。(左ペインにドラッグする必要さえありません。)

この方法は非常に便利で、手動でフォルダを選択するのと同じくらい強力です(上記の[ファイル] > [ フォルダからインポート]を使用)。これらの方法のいずれかを使用してファイルまたはフォルダーを開くと、Shotwellはライブラリにコピーせずに写真を開くオプションを提供します。

Shotwellのダイアログボックスのスクリーンショット。ユーザーに、画像をShotwellライブラリの場所にコピーするか、コピーせずに所定の場所にインポートするかを選択するように求めます。

コピーせずにインポートするには、[ 写真コピー ] ではなく[ その場でインポート ]をクリックします。


画像ファイル名のリストを使用してShotwellを起動する

何らかの理由で、ターミナルでコマンドを実行してこれを実行する必要がある場合は、shotwellコマンドを実行して、各イメージのファイル名を引数として渡すことができます。Globstarはそれを簡単にします:

shopt -s globstar
shotwell **/*.cr2

これ.cr2により、現在のディレクトリの任意の場所にあるファイルが開きます。これは、Shotwellを実行してからフォルダーをドラッグするのとは異なります。Shotwellは、指定した名前のファイルのみをインポートしようとします。ただし、Shotwellは、開くように指示したファイルと同じフォルダーにある他の画像ファイルを表示することが多いため、これはニーズに十分ではない場合があります。(そして、あなたの問題についてあなたが与えたさらなる情報はそれがそうではないことを示唆しています。代替案については以下を参照してください。)

これには、名前がで始まるファイルまたはサブフォルダーは含まれません.。ただし、名前がドットで始まるCR2ファイルがある場合は、ほとんどの場合、とにかくShotwellでそれらを開く必要はありません。この方法でファイルまたはフォルダーに意図的に名前を付けない限り、画像またはドキュメントのファイル名拡張子が付いたdotfileは、実際の画像やドキュメントではなく、メタデータファイルである可能性が高くなります。たとえば、macOSは、外部メディア(フラッシュドライブやデジタルカメラなど)にアクセスするときに、そのようなファイル._kittens.cr2実際の画像などkittens.cr2)を追加することがよくあります

名前で始まるファイル、.または名前がで始まるフォルダにあるファイルも検索する.場合は、 dotglobも有効にします。これを行うには、shopt -s dotglobまたは両方globstarを渡しdotglobshopt組み込みに渡します。

shopt -s globstar dotglob

デフォルトでは、グロブは大文字と小文字を区別します。しかし、あなたが望むかもしれない大文字と小文字を区別せずにファイル名を一致させるように終わる開いているファイルのように、.cr2.Cr2.cR2、と.CR2。これを行うには、次のいずれかを実行します。

  • 単独で、または他のシェルオプションを使用shopt -sしてnocaseglob、を実行してnocaseglobを有効にします。たとえば、shotwellすべての.cr2ファイルで実行し、大文字と小文字を区別せずに検索し、.-filesと-directoriesにファイルを含めます.

    shopt -s globstar dotglob nocaseglob
    shotwell **/*.cr2
    
  • または、グロブパターン自体の.[cC][rR]2代わりに使用.cr2します。たとえば、これは上記と同じことを実現します。

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

    大文字と小文字の区別は、.ファイルとフォルダが一致するかどうかとは完全に異なることに注意してください。dotglob上記の例から削除しても、大文字と小文字は区別されません。

現在のディレクトリを単に使用するのではなく、ディレクトリを指定するには、その名前とaをグロブの/前に置き**/*.cr2ます。たとえば、shotwell上記のコマンドを次のコマンドで置き換えると、ホームディレクトリのサブディレクトリ.cr2内のすべてのファイルが開きPicturesます。

shotwell ~/Pictures/**/*.cr2

現在のディレクトリを使用する最初のコマンドとは異なり、そのコマンドをどこで実行しても、Shotwellに同じファイルを開くように指示します。

テスト中

このために本当にターミナルを使わなければならないなら、私はそれがもっと複​​雑なものの一部であるかもしれないと思います。あなたが好きなら、あなたは実際に置き換えることによって、それらを実行する前に、このようなコマンドをテストすることができますshotwellprintf '%s\n'。ファイル名をShotwellに渡す代わりに、1行に1つずつリストします。たとえば、私のマシンでは:

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およびその他のシェルオプションをオフにする

globstarシェルオプションが機能するように有効化されました。これは、shopt -s globstarコマンド(上記)が行ったものです。すでに有効になっている場合は、複数のコマンドは必要ありません。また、シェルインスタンスごとに1回だけglobstarを設定する必要があります。

次のコマンドを実行すると、globstarをオフに戻すことができます。

shopt -u globstar

また、次のコマンドを実行すると、globstarがオンかオフかを確認できます。

shopt globstar

スクリプトでglobstarを使用している場合、globstarを考慮せずに作成された同じスクリプト内のコードが後である可能性がある場合は、オフにすることを検討する必要があります。たとえば、グロブスターが無効になっている場合、通常、**意味の*ある書き込みは問題ありませんが、グロブスターがオンになっていると、コマンドが意図したよりもはるかに多くのファイルに影響を与えるため、重大な問題が発生する可能性があります。

同様に、dotglobまたはnocaseglobを使用していて、それらもオフにしたい場合は、それぞれshopt -u dotglobとを使用してオフにすることができますshopt -u nocaseglob。複数のシェルオプションをshopt -uに渡して、それらを同時に設定解除することもできます。たとえば、をオフglobstar, dotglobにするにはnocaseglob

shopt -u globstar dotglob nocaseglob

globstarと比較して、dotglobやnocaseglobをオンにしておかなかったために発生する可能性のある重大な間違いが少なくなります。しかし、他の人(Ask Ubuntuなどのサイトで相談している人を含む)は、特に指示がない限り、使用するコマンドを提案すると、通常はdotglobとnocaseglobが無効になっていると見なします。

これらのglob関連のシェルオプション(およびglob 全般)の詳細については、bashリファレンスマニュアルを参照してください。これらはすべて、主に4.3.2 Shopt Builtinでカバーされています。globstarについては、「3.5.8.1パターンマッチング」も参照してください。dotglobについては、3.5.8 Filename Expansionも参照してください。


新しいディレクトリツリーの構築

あなたのケースでは、ファイルのみを表示するために本当にShotwellが必要であるように見える .cr2.cr2.cr2のでファイルと同じフォルダにファイルがあり、Shotwellでの画像閲覧も自動的にそれらのファイルを提供しているため、次のようなフォルダが必要になります.cr2開こうとしているファイル以外の画像ファイルは含まれていません。

あなたが提案したようにファイルを移動することは1つのアプローチですが、代わりにファイルをコピーするか、ファイルへのシンボリックリンク作成することをお勧めしますFOLDOCも参照)。

  • デバイス間でファイルを移動する場合は、とにかくコピーする必要があるため、その場合は移動が速くなりません。
  • スペースがある場合は、必要に応じて実行した内容が正しいことを確認できるまで、変更を加えていないフォルダを最初からすべて保存しておくことをお勧めします。明らかに、これは常に適用可能または実用的ではありません。しかし、あなたの場合、これらのファイルはデータ回復操作の結果です。何がどこから回収されたのかを正確に記録しておくと便利です。
  • シンボリックリンクの作成を選択した場合、消費される追加スペースの量は非常に少なくなります。(ただし、ターゲットディスクが完全にいっぱいの場合でも、シンボリックリンクを作成するには、そのディスクの領域を解放する(または別のターゲットディスクを使用する)必要があります。)

あなたがするもう一つの決定もあります。ファイル階層をフラット化して、同じディレクトリにすべての新しいエントリ(コピーでもシンボリックリンクでも)を作成しますか?または、少なくとも1つの.cr2ファイルを含むソースの各ディレクトリに対応するディレクトリを宛先に作成しますか?

  • ファイル階層をフラット化すると、すべてのファイルを一度に簡単に表示できます。特に、ファイルの名前とサイズを一度に確認したり、グラフィカルファイルブラウザーでファイルの任意の組み合わせを選択したりするのは簡単です。

  • しかし、それはそれらがどのフォルダーにあったかについての情報も失います、それは価値があるかもしれません(ファイルを移動しなければ元のフォルダーに戻ってそれらを探すことができますが)。

  • ただし、ファイル階層を平坦化することのより大きな問題は、異なる場所に同じ名前のファイル2つ以上ある場合にどうなるかです。ファイル階層をフラット化すると、その方法に応じて、最初以外のすべてがコピー(またはリンク)に失敗してエラーまたは警告が表示されるか、最後のコピー(またはリンク)以外のすべてが失敗します上書き

    これは、ファイルを移動するよりも、シンボリックリンクをコピーまたは作成することをお勧めするもう1つの理由です。複数のファイルを同じファイルに「正常に」移動すると、最後のファイルを除いてすべて失われます。

すべてをサブディレクトリのない単一のディレクトリにフラット化することの欠点のため、ここで私がとるアプローチは、宛先に新しいディレクトリツリー構築します。

方法1:コピー

これは少し簡単なので最初に示しますが、特に宛先ドライブにすべてのファイルを保持するのに十分なスペースがない場合は、シンボリックリンク(「方法2」)を作成することをお勧めします。「方法2」は少し複雑ですが、その手法の使用方法に関するリソースが少ないように思われるため、はるかに詳細です。この状況では、ほとんどの人が好むと思います方法であり、両方の方法に適用される情報です-パス内のスペースをエスケープすることに関する基本的なアドバイス-ここではなく、そこで与えられます。

ディレクトリツリーをコピーする必要があり、コピー操作をカスタマイズする必要がある場合は、通常、rsyncではなくを使用する必要がありcpます。これはそのようなケースの1つです。

交換srcすべてのCR2ファイルを含むトップレベルのディレクトリへのパスで、および交換destあなたは実行CR2ファイルへのシンボリックリンクの階層が含まれていることを作成するディレクトリの名前で:

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

内に追加のトップレベルディレクトリを作成する必要がない限り/、ソースディレクトリの名前の後ろを忘れないでください。あなたは末尾を省略した場合つまり、、そして、あなたのための内部を先ディレクトリを作成します。たとえば、を含まない相対パスであるとします。次に:dest/rsyncdestsrc/

  • ではsrc/、あなたの中rsyncのコマンドは、シンボリックリンクを取得dest/foo/bar.cr2、ファイルのためにsrc/foo/bar.cr2
  • ではsrc、あなたの中rsyncのコマンドは、シンボリックリンクを取得、ファイルのために。dest/src/foo/bar.cr2src/foo/bar.cr2

シンボリックリンクが配置されるトップレベルのディレクトリが.cr2、シンボリックリンクが指すファイルを含むトップレベルのディレクトリと同じ名前になると混乱する可能性があるので/、宛先の最後にを含めることをお勧めしますrsyncコマンドのディレクトリ名。(そして、ソースディレクトリについては、空のディレクトリ、存在しないディレクトリ、またはこの目的専用のディレクトリを指定してください。そうしないと、他のフォルダが乱雑になります。)

あなたの宛先またはソースディレクトリパスのような、シェルで特別扱い任意の空白(または文字が含まれる場合は、コマンドラインプログラムやスクリプトにファイルまたはディレクトリの名前を渡すときなどは、一般的にそうである\$'、および様々な他の句読点)、次にそれらを引用する必要があります。スペースの最も一般的なケースについて、「方法2」でこれを行う方法を詳しく説明しました。そのセクションでの引用に関するアドバイスは、ここにも適用されます。ただし、フォルダーの名前を引用する方法がわからない場合は、フォルダーをTemrminalにドラッグするだけで、Ubuntuに自動的に引用させることができます。完全なパスが正しい引用で貼り付けられます

.cr2ファイルとそれらを含むフォルダーのみをコピーした後、Shotwellで宛先フォルダーを開くことができます。(上記の「Shotwellで画像のフォルダー(サブフォルダーを含む)を開く」を参照してください。)ただし、を実行する前にrsync、で始まるエントリをスキップするかどうか、.および大文字と小文字を区別するサフィックスを持つエントリを含めるかどうかを決定することをお勧めします。その場合は、少し異なるrsyncコマンドを実行する必要があります。

ドットエントリの処理と大文字と小文字の区別のカスタマイズ

別のrsyncコマンドを使用して、ドットで始まるファイルとディレクトリをスキップするかどうか、および大文字と小文字を区別してサフィックスを一致させるかどうかを変更できます.cr2

上記のコマンドに、名前がで始まるディレクトリとファイル含まれてます.そのようなファイルとディレクトリを除外する--exclude='.*/' --exclude='.*'には、他--includeのすべてのと--excludeの前に置きます。つまり、rsync代わりにこのコマンドを使用します(もちろん、srcおよびを適切に置き換えますdest)。

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

rsync示されたコマンドは、これまでの大文字と小文字が区別されていて、その最後にファイルをコピーしません.CR2.Cr2または.cR2のではなく.cr2。このようなファイルをコピーする場合は、の代わりに--includeパターンを使用して、そのことを考慮する必要があります。*.[cC][rR]2*.cr2

この3番目のコマンドは大文字と小文字を区別、(最初のコマンドと同様に)名前が次で始まるファイルとディレクトリをスキップしませ.

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

を使用してファイルをコピーする方法を使用しrsyncていて、これらのコマンドのどれが必要かわからない場合、何かを見落とさないようにしたい場合は、そのコマンドを使用することをお勧めします。ただし、ドットファイルにはメタデータが含まれる場合があり、画像のように名前が付けられたドットファイルは実際には画像ではない場合があることに注意してください。中ドットファイルに関する議論を参照してください。「イメージファイル名のリストでShotwellの起動」上記のセクション、および以下の「道2」のドットファイルとケース感度にします。

この4番目のコマンドは、大文字と小文字を区別しないと、(2番目のコマンドのように)ない名前で始まるファイルやディレクトリをスキップ.

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

方法2:シンボリックリンクの作成

これは私がお勧めする方法ですが、宛先ドライブに十分なスペースがある場合は方法1で問題ありません。これを使用するために方法1を読む必要はありません。

ここで紹介する方法は、.cr2ファイルのリストを作成し、リストをループして、必要に応じてターゲットディレクトリを作成し、各.cr2ファイルへのシンボリックリンクを入力します。

これは非常に複雑なので、対話的に入力するのではなく、スクリプトに入れることをお勧めします。スクリプトは好きな場所に配置できますが、便宜上、スクリプトをホームフォルダーに直接配置して実行する方法を示します。

スクリプトを書き込む(または貼り付ける)。

make-symlinksホームフォルダーにテキストファイルを作成します。ファイル拡張子は必要ありません。

これは、Vim、Nano、Gedit、Leafpadなどのテキストエディターで実行できます。ただし、LibreOffice Writerのようなワードプロセッサは使用しないでください。(必要に応じてcat > ~/make-symlinks、を実行し、ファイルの内容を貼り付け、新しい行でCtrl+ を押すことDでも実行できます。)

スクリプトに以外のmake-symlinks名前を付けた場合は、後でスクリプトを使用するコマンドを実行するときに必ずその名前を使用してください。

#!/bin/bash

shopt -s globstar dotglob nocaseglob

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

それをファイルに入れ、ファイルを保存します。このスクリプトは、上記の「イメージファイル名のリストを使用したShotwellの起動」で説明したBash機能であるglobstarを使用します。

ドット付きエントリの処理方法と大文字と小文字の区別を変更できます。

必要に応じて、いくつかの変更を加えることができます。

  • .cr2名前がで始まるファイル.または名前がで始まるディレクトリにあるファイルを含めたくない場合は、行から.削除dotglobshoptます。

    名前がで始まるファイルおよびディレクトリ.は、メタデータによく使用されます(上記の「イメージファイル名のリストを使用したShotwellの起動」セクションを参照してください)。一方、すべてが揃っていることを確認したい場合や、どういうわけか欠けているものがある場合に、そこにあると確信している場合は、を保持する必要がありdotglobます。

  • 含めたい場合のみ、正確でその目的のファイル.cr2が、いない場合変異体を(.CR2.Cr2、および.cR2)、その後、削除してくださいnocaseglob。状況にはデータの回復が含まれており、シンボリックリンクのディレクトリを開いたときに見逃しファイルはShotwellに表示されないため、結局のところ、この方法のポイントであるので、そのまま保持することをお勧めしnocaseglobます。

実行可能にします。

次のコマンドを実行して、スクリプトを実行可能としてマークします。

chmod +x ~/make-symlinks

ソースで実行し、引数として宛先を渡します。

次に、ディレクトリをソースディレクトリ、つまり画像を含む最上位のフォルダに変更します。たとえばPictures、ホームディレクトリのサブディレクトリにある場合は、次のコマンドを実行します。

cd ~/Pictures

ここでスクリプトを実行します。宛先ディレクトリをコマンドライン引数としてスクリプトに渡します。

たとえばcr2s、シンボリックリンクを含めるために呼び出されるディレクトリをデスクトップに作成する場合は、次のコマンドを実行します。

~/make-symlinks ~/Desktop/cr2s

または、そのディレクトリをホームフォルダに直接置きたい場合:

~/make-symlinks ~/cr2s

または、ドライブがマウントされていて、そのドライブ/media/you/MyDrive上にlinksシンボリックリンクを含むフォルダーを作成する場合は、次のようにします。

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

ただし、ドライブが/media/you/My Drive(スペースを含む)場合は、引用符を使用する必要があります。これらの作品のいずれか(1つだけ使用し、すべて実行しないでください):

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

ただし~、ホームディレクトリに使用する場合は、それを引用しないでください。

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

make-symlinksそこにサブディレクトリを作成するのと同じように、宛先ディレクトリが存在しない場合は、作成します。ただし、宛先がすでに存在する場合でも機能します。

これを複数回実行して、同じ宛先ディレクトリを渡すこともできます(たとえば、Ctrl+で中断した場合C)。ただしfailed to create symbolic link、既存のシンボリックリンクに対してエラーが発生し、混乱を招く可能性があります。

おそらく、すでに存在し、無関係なファイル(ホームディレクトリなど)を含むディレクトリの名前をに渡したくないでしょうmake-symlinks。その場合、そこに多数のシンボリックリンクとサブフォルダーが作成されることを期待できます。たぶん、新しいディレクトリ、またはまだ存在しないディレクトリを使用したいと思うでしょうmake-symlinks

新しく作成したシンボリックリンクツリーをShotwellにインポートします。

を実行した後make-symlinks、この回答の最初の部分で示したいずれかの方法(「Shotwellで画像のフォルダー(サブフォルダーを含む)を開く」)を使用して、それに渡したディレクトリをShotwellにインポートします。たとえば、Shotwellを開いてフォルダをドラッグできます。

フォルダ内のすべてのエントリは.cr2、他のファイルタイプを含まないファイルまたはディレクトリへのシンボリックリンクのいずれかであるため、Shotwellは他のファイルを参照できません。


5

Shotwellは、画像が開いているすべてのディレクトリで見つかったすべての画像を循環するためfind -name '*.cr2' -exec shotwell '{}' +、私が最初に提案したように使用しても、実際には役に立ちません。Shotwellの設定はかなり制限されているため、必要なファイルのみを開くには、ファイルを自分で新しいディレクトリに移動するしかありません。

あなたはそれのために使うことができますfind

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

重複ファイルの作成を避けたい場合は、に置き換えcpmvください。

ノート:

  • mkdir ~/cr2files ホームディレクトリに新しいディレクトリを作成する
  • find 現在のディレクトリからツリー全体を再帰的に検索します
  • -type f ファイルのみを検索
  • -iname 大文字と小文字を区別せずに名前でファイルを検索する
  • '*.cr2'名前が.cr2-で終わる前に引用符を使用して、シェルがグロブを展開するのを停止しますfind
  • -not -path './dir/*'dir結果からディレクトリの内容を除外します
  • {} 見つかったファイルのパスを表します
  • --その後cpcp、それ以上のオプションを受け入れないように指示します。これにより-、問題の原因で始まるファイル名が回避されます。

次に、Shotwellを使用して新しいディレクトリ内の任意のファイルを開き、それらすべてを循環させることができます


なぜこれもディレクトリ内の.jpgおよび.pngファイルを開くのですか?* .cr2が指定されていることがわかりますか?ショットウェルで左矢印を押したときに.cr2ファイルを確認するにはどうすればよいですか?+の代わりに\を使用すると、何も起こりません:(
user285884

ああ!これは...私はそれを回避する方法を見つけ出すことができれば、私は見てみましょう...私はそれがディレクトリで見つかったすべての画像を通じて申し訳ありませんが、shotwellサイクルだuser285884 @問題である
Zanna

@ user285884は編集されましたが、エレガントなソリューションを作成できません:(
Zanna

1
わかりました、努力をありがとう!これについてはどうですか?.cr2ファイルのディレクトリを検索し、それらをcr2filesという別のフォルダーに移動します。1つのサブフォルダー内でmv * .cr2 ../cr2files/を使用してそれを実行しました。しかし、どのようにこれを行い、どのファイルを調べるかを指定するにはどうすればよいですか?「ちょっとLinuxは.cr2ファイルのフォルダー1-10を見て、それをcr2filesフォルダーに移動する」のようなものですか?ありがとうZanna
user285884

1
私がどこにいるかについてのいくつかのコンテキストのために。写真を数枚失いました。だから私はphotorecをやった、そしてそれは私に私のハードドライブ全体をいっぱいにするのに十分な大量のフォルダを与えた。それで、1つを除いて私のハードドライブのすべてのフォルダーを調べたいと思います。なぜなら、私が知っている大量の.cr2ファイルが、私が探しているものではないためです。だから私はlinuxが1つを除いてすべてのフォルダーを通過することを望みます。あなたのコードがそれを行うかどうかはわかりません。{}は何をしますか?また、-vの後の「-」?Zanna、ありがとう!
user285884 2017年

1

オプション1- xargsファイル名にスペースが含まれる場合の使用

以下のコメントが指摘しているように、back ticksファイル名にスペースが含まれている場合、(以下のオプション3)を使用すると機能しなくなります。findコマンドをshotwell使用し、xargsオプションを使用して出力を渡すより安全な方法は次のとおりです。

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

-print0フラグが使用することを見つけるよう指示\0(ヌル文字)のファイル名の間に区切り文字を、そして-0フラグが伝えxargsこれらの期待する\0区切り文字を。

Stack Overflow の優れた回答(findコマンドで返されるファイルのリストをパイプ処理する方法)の功績をたたえます。

オプション2- -execファイル名にスペースが含まれる場合の使用

以下のコメントが指摘するように、この-execオプションはスペースを含むファイル名もサポートします。以下のその他のコメントは、ファイル数がこれを超えるとこの問題が発生することを示しています。

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

オプション3-ファイル名にスペースがない場合

昔は、ファイル名にスペースがあり、256文字になるまで、このオプションはうまく機能していました。このオプションは他の多くのWebサイトで言及されていますが、このオプションは使用しないでください。昔は、findコマンドを使用して出力を渡すのshotwellが最も簡単な方法でした。

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

これにより、find現在のディレクトリからが開始され、すべてのサブディレクトリが含まれます。

  • 上記のback tick単一引用符ではなく、の使用に注意してください'。バックティックの使用は、$(...)bash内で句を囲むことに似ています。
  • 最初の引数は、現在のディレクトリである開始点を.示しfindます。あなたはパスの/home/$USER/Pictures代わりに何かをすることができます.
  • 2番目の引数-nameは、(ディレクトリではなく)ファイル名を検索するようにfindに指示します。
  • この手法は、だけでなく、すべてのコマンドで機能しますshotwell。つまり、あなたはそれを使用することができcatheadtailおよび他のほとんどの一般的なLinuxコマンド。

バッククォートの使用は一種の眉をひそめているだけでなく、単語分割に問題があります。パイプxargs-0
ラインに

この回答のアプローチの問題は、ファイル名のいずれか、またはファイルを含むディレクトリの名前にスペースが含まれていると、間違った動作をすることです。多くの人が$( )コマンド置換構文をバックティックコマンド置換構文よりも好んでいますが、これはこの問題には関係ありません。どちらもまったく同じように失敗します。@Serg私はそれをどうするかについての新しい答えを投稿することを勧めxargsます。(置換を入れて" "も機能しません。すべてのfind結果が単一の引数として渡されます。)
Eliah Kagan

私はまた、この回答を書くときにxargsオプションを見ましたStack Overflow。私もそのオプションで拡張します。残念なことに、破損したNTFSパーティションを修正するために今朝Windows 8で起動する必要があったため、テストに問題がありました。後で答えを更新します。それを指摘してくれてありがとう:)
WinEunuuchs2Unix 2017年

なぜ使用しないの-execですか?
Zanna

@Zanna -execオプションも追加します:)
WinEunuuchs2Unix 2017年

-2

ショットウェルが未加工のファイルを開いていることすら知らなかった。デジカムやダークテーブルを使用すると、より多くの走行距離が得られると思います。DigikamにはいくつかのKdeコンポーネントが付属しており、非常に優れた写真マネージャーです。Darktableには非常に優れた非破壊編集機能が備わっています。


この回答を(編集によって)拡張して、Digikam(またはDarktable)を.cr2使用してフォルダー内のファイルのみを参照する方法の詳細情報を含めることができますか?その場合は、元のポスターは、トラブルShotwellを表示するようになってきたことから、これは、貴重な可能性があり、単に.cr2ファイルを。Shotwellを使用してそれらのファイルのみを参照し、他のファイルは参照しないようにするために、回答に追加のアプローチを追加しましたが、Shotwellはこれに最適なツールではないことを強く確信しています。
Eliah Kagan 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.