
Linuxファイルシステムタイプの1つを使用してフォーマットされた外部ドライブには、多くの写真を含む大きなツリーがあります(どのタイプのものか覚えていません)。私のMacにインストールされていて写真をコピーしようとしていますが、「somePic.jpg」と「somePic.JPG」というファイルがあるようです。コピーしようとすると、OSXは名前が重複していると文句を言って終了します。ファイル名が一意であることを確認しながら、どのようにコピーできますか? OSXはドライブを読み取り専用でマウントするため、最初にソースツリーで重複したエントリの名前を変更することはできません。
私は何時間もcp、gcp、sed、xargsで遊んでいましたが、何も機能しませんでした。
答え1
...あなたの言葉によると質問に対するコメント...
pax -rws'/\.JPG$/.CAP&/' /root/of/copied/tree /dest/path
もし.jpg
そして.JPG
唯一の質問です。それがうまくいくでしょう。
また、p
ファイル名の置換に rint 基本要素を追加して、変更されたすべてのファイル名のリストを取得することもできます。
pax -rws'/\.JPG$/.CAP&/p' /root/of/copied/tree /dest/path
私が知っている限り、pax
OSXシステムにすでにインストールされている必要があるため、全体的にストレスのないソリューションになります。
しかし、問題がさらに深刻になると、pax
サポートに興味がある可能性があります。
-i
対話的にファイル名またはアーカイブメンバーの名前を変更します。パターンオペランドに一致する各アーカイブメンバー、またはファイルオペランドに一致する各ファイルについて、ファイル名、ファイルモード、および変更時刻を入力するように求められ
pax
ます。次に、1行を読みます。この行が空の場合は、ファイルまたはアーカイブメンバーをスキップします。行が単一のピリオドで構成されている場合、ファイルまたはアーカイブメンバーは名前を変更せずに処理されます。それ以外の場合、その名前はその行の内容に置き換えられます。 EOFがある場合は、ゼロ以外の終了状態で即座に終了します。/dev/tty
pax
/dev/tty
pax
(CTRL+D
)応答の読み取り中に問題が発生したか、/dev/tty
読み取りおよび書き込み操作を開くことができませんでした。
答え2
以下は簡単な焼けです。
# for f in $( find yoursourcedirectory -name \*.jpg ) ; do cp ${f} yourtargetdirectory/${f}.CAP1.jpg ; done
それから
# for f in $( find yoursourcedirectory -name \*.JPG ) ; do cp ${f} yourtargetdirectory/${f}.CAP2.jpg ; done
これにより、ソースから *.jpg という名前のすべてのファイルがインポートされ、*.CAP1.jpg にコピーされ、すべての *.JPG ファイルが *.CAP2.jpg にコピーされます。
別の方法はdiffmergeを使用することです。 https://sourcegear.com/diffmerge/
別の方法(ファイルが多い場合は同じ名前で試してください)は、各ファイルにランダムな名前を割り当てることです。
# for f in $( find yoursourcedirectory -iname \*.JPG ) ; do cp ${f} yourtargetdirectory/$(dd if=/dev/random count=20 2>&1 /dev/null |md5).jpg ; done
(-inameスイッチを使用すると、検索時に大文字と小文字が区別されないため、*.JPGと*.jpgの両方が検索されます。)