何かのようなもの
shotwell *.cr2 ./
それはうまくいきませんが、基本的に_.cr2
で終わるすべてのファイルと現在のディレクトリ(サブフォルダを含む)を開くためにショットウェルを使用したいです
コンテキストは、カメラで撮った写真が失われていることです。これは、その後、メモリカードから削除したものです。
ショットウェルの「画像の欠落」にはそれらのサムネイルがありますが、それらは見つかりません。そこで、photorec
を実行してそれらを見つけようと考えました。その結果、photorecはフォルダーとファイルの大量の負荷を私に与えました。すべてのファイルを1つずつ調べる代わりに、ハードドライブで.cr2ファイルを検索することにしました。ただし、Photogs
という名前の特定のフォルダーは、photorec
データダンプの一部ではないため、それらがありません。 。
Shotwellは、画像が開いているすべてのディレクトリで見つかったすべての画像を循環するため、最初に提案したようにfind -name '*.cr2' -exec shotwell '{}' +
を使用しても効果はありません。 Shotwellの設定はかなり制限されているため、必要なファイルのみを開くと考える唯一の方法は、ファイルを単独で新しいディレクトリに移動することです。
そのためにfind
を使用できます。
mkdir ~/cr2files
find -type f -iname '*.cr2' -not -path './dir/*' -exec cp -v -- '{}' ~/cr2files \;
重複ファイルの作成を回避する場合は、cp
をmv
に置き換えます。
mkdir ~/cr2files
は、ホームディレクトリに新しいディレクトリを作成しますfind
現在のディレクトリからツリーを下方向に再帰的に検索します-type f
ファイルのみを検索-iname
大文字と小文字を無視して、名前でファイルを検索'*.cr2'
で終わる名前.cr2
-引用符を使用して、シェルがfind
に渡される前にグロブを展開するのを停止します-not -path './dir/*'
は、結果からディレクトリdir
の内容を除外します{}
は、見つかったファイルのパスを表します--
の後にcp
はcp
にそれ以上のオプションを受け入れないように指示します。これにより、-
で始まるファイル名が問題を引き起こしなくなりますその後、Shotwellを使用して新しいディレクトリ内の任意のファイルを開き、それらすべてを循環できます
xargs
の使用以下のコメントが指摘しているように、ファイル名にスペースが含まれる場合、back ticks
(以下のオプション3)を使用すると壊れます。 find
コマンドを使用し、shotwell
オプションを使用してxargs
に出力を渡すより安全な方法は、次のようになります。
find . -name "*.cr2" -print0 | xargs -0 shotwell
-print0
フラグは、ファイル名の間に\0
(ヌル文字)区切り文字を使用するようfindに指示し、-0
フラグはxargs
にこれらの\0
区切り文字を期待するように指示します。
ここで見つかった優れた答え( findコマンドによって返されたファイルのリストをパイプする方法 )がStack Overflowにあります。
-exec
の使用以下のコメントが指摘するように、-exec
オプションはスペースを含むファイル名もサポートします。以下のその他のコメントは、ファイル数がこれを超えるとこの破損が発生することを示しています。これは次のようになります。
find . -name "*.cr2" -exec shotwell {} +
昔は、ファイル名にスペースがあり、256文字の長さになる前に、このオプションはうまく機能していました。このオプションは他の多くのウェブサイトで言及されていますが、このオプションは使用しないでください。昔、find
コマンドを使用してshotwell
に出力を渡すのが最も簡単な方法でした:
shotwell `find . -name "*.cr2"`
これにより、現在のディレクトリからfind
が開始され、すべてのサブディレクトリが含まれます。
$(...)
でフレーズを囲むのに似ています。.
は、find
に現在のディレクトリである開始点を与えます。 /home/$USER/Pictures
の代わりに.
または他の何かを渡すことができます。-name
は、findにファイル名(ディレクトリではなく)を検索するように指示します。shotwell
だけでなく、すべてのコマンドで機能します。つまり、cat
、head
、tail
およびその他のほとんどの一般的なLinuxコマンドに使用できます。