通常は、Shotwellを開いてフォルダにドラッグするだけです。
必要に応じて、シェルにCR2ファイルのリストを作成させ、それらのファイルのみを開くようにShotwellに指示できます。たまにそれがあなたの望むものかもしれませんが、この場合、 Shotwellの振る舞い(他の状況では、機能)にある他の画像ファイル(すべてのタイプの)を自動的に表示するため、必要なことをまったく実行できません開いた画像と同じフォルダ。
Shotwellが関心のある画像のみを認識するようにするには、ディレクトリツリーを別の場所に複製.cr2
し、それらを含むファイルとフォルダーのみをコピーして、他には何もコピーしません。ただし、追加のスペースがかなり必要になる場合があります。だから、別のアプローチは、階層構築することであるシンボリックリンクの代わりに、新しいディレクトリツリー持つことの- のコピー元の.cr2
ファイルを、あなたはの新しいディレクトリツリー持ちにsyminksそれらを。これははるかに少ないスペースをとります。
この回答はそれらすべてのアプローチをカバーしています。
Shotwellで画像のフォルダー(サブフォルダーを含む)を開く
Shotwell自体には、写真のディレクトリツリー全体を開く2つの方法があります。これらがうまくいくなら、コマンドラインで何か賢いことをしたり、まったく使用したりする必要はありません。そうでない場合は、別の手法に関連してこれを行う可能性があります。(たとえば、シンボリックリンクまたは.cr2
ファイルのコピーの新しいディレクトリを作成することになった場合は、次のいずれかの方法でそれを開くことができます。)
方法1:Shotwellでフォルダ全体を開くだけです。
Shotwellの[ファイル ]メニューで、[ フォルダーからインポート ]をクリックします。次に、画像をインポートするフォルダを選択します。これは.cr2
ファイルに限定されませんが.cr2
、デジタルカメラで作成された画像を含む複数のサブフォルダーからファイルを開く場合、存在する可能性のあるファイルはおそらくそれらのみです。
詳細については、すべての画像を再帰的に表示する(サブフォルダーを含む)に関するJakobの回答を参照してください。
方法2:フォルダーを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
を渡しdotglob
てshopt
組み込みに渡します。
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に同じファイルを開くように指示します。
テスト中
このために本当にターミナルを使わなければならないなら、私はそれがもっと複雑なものの一部であるかもしれないと思います。あなたが好きなら、あなたは実際に置き換えることによって、それらを実行する前に、このようなコマンドをテストすることができますshotwell
しprintf '%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
/
rsync
dest
src
/
- では
src/
、あなたの中rsync
のコマンドは、シンボリックリンクを取得dest/foo/bar.cr2
、ファイルのためにsrc/foo/bar.cr2
。
- では
src
、あなたの中rsync
のコマンドは、シンボリックリンクを取得、ファイルのために。dest/src/foo/bar.cr2
src/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
名前がで始まるファイル.
または名前がで始まるディレクトリにあるファイルを含めたくない場合は、行から.
削除dotglob
しshopt
ます。
名前がで始まるファイルおよびディレクトリ.
は、メタデータによく使用されます(上記の「イメージファイル名のリストを使用した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は他のファイルを参照できません。