web-dev-qa-db-ja.com

フォルダー内のすべての.cr2ファイルとそのすべてのサブフォルダーをShotwellで開きたいのですが、どのコマンドラインを使用しますか?

何かのようなもの

shotwell *.cr2 ./

それはうまくいきませんが、基本的に_.cr2で終わるすべてのファイルと現在のディレクトリ(サブフォルダを含む)を開くためにショットウェルを使用したいです

コンテキストは、カメラで撮った写真が失われていることです。これは、その後、メモリカードから削除したものです。

ショットウェルの「画像の欠落」にはそれらのサムネイルがありますが、それらは見つかりません。そこで、photorecを実行してそれらを見つけようと考えました。その結果、photorecはフォルダーとファイルの大量の負荷を私に与えました。すべてのファイルを1つずつ調べる代わりに、ハードドライブで.cr2ファイルを検索することにしました。ただし、Photogsという名前の特定のフォルダーは、photorecデータダンプの一部ではないため、それらがありません。 。

9
user285884

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を使用して新しいディレクトリ内の任意のファイルを開き、それらすべてを循環できます

5
Zanna

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

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

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

-print0フラグは、ファイル名の間に\0(ヌル文字)区切り文字を使用するようfindに指示し、-0フラグはxargsにこれらの\0区切り文字を期待するように指示します。

ここで見つかった優れた答え( findコマンドによって返されたファイルのリストをパイプする方法 )がStack Overflowにあります。

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

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

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

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

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

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

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

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