サブフォルダ構造を失うことなく、サブフォルダの特定のファイル形式をターゲットフォルダに移動する

サブフォルダ構造を失うことなく、サブフォルダの特定のファイル形式をターゲットフォルダに移動する

まず、Linuxに関する私の知識は非常に限られていますが、常に最善を尽くします。また、Cronjobとスクリプトを使用してUnraid ServerとRPiで多くの作業を自動化しましたが、今は少し迷っています。

次の状況:icloudフォトダウンローダを使用して、icloudリポジトリのすべての写真とビデオをローカルNASに自動的にダウンロードしています。サブフォルダ構造/yyyy/mm/を使用して.jpgと.movをダウンロードします。たとえば、今日撮影したビデオは今夜/2020/12/IMG_0123.movにダウンロードされます。

また、mkvは私のすべてのデバイスで再生されますが、.movは常にPlexなどで変換したいので、 "handbrake"を使用して.movを.mkvに変換します。 Handbrakeの場合、監視フォルダ(/videowatch/)と出力フォルダ(/videooutput/)を管理しました。このフォルダは、監視フォルダにコピーしたビデオファイルを自動的に変換し、フォルダ構造ごとに同じファイルを再作成してエクスポートするときに使用します。出力フォルダ。例:上記のビデオファイルをサブフォルダ/videowatch/2020/12/IMG_0123.movにコピーしました。ハンドブレークはそれをmkvにトランスコードし、ファイルを/videooutput/2020/12/IMG_0123.mkvにエクスポートします。これにより .mov が削除されます。

この手順は現在手動で行われており、自動化したいと思います。

このスクリプトをどのように管理できますか?次の手順を実行する必要があります。

  1. すべてのサブフォルダで.movタイプのファイルを検索する
  2. 見つかったすべての.movファイルを/ videoowatch /フォルダに移動しますが、サブフォルダ構造を再作成します。

例: icloudpd は、/2020/11/ および /2020/12/ フォルダーに 2 つの新しい .mov (file1.mov および file2.mov) をダウンロードします。これら2つのフォルダには、すでに他の多くの.jpgファイルと.mkvファイルが保存されています。

  1. スクリプトは、2 つの .mov ファイル /2020/11/file1.mov および /2020/12/file2.mov を認識します。
  2. スクリプトはこれら2つのファイルを/ videoowatch /フォルダに移動し、サブフォルダ構造を再作成します。その後、/videowatch/2020/11/file1.movと/videowatch/2020/12/file2.movがあります。

それは可能ですか?最後の手順として、ビデオ出力フォルダの内容を/に戻して、新しいmkvファイルを古い.movファイルの保存先フォルダに移動する必要があります。ハンドブレーキはサブフォルダ構造を維持するため、crontabのmvエントリを介して簡単に処理できます。

あまりにも複雑に説明していないといいですね。

あなたの助けをいただきありがとうございます!


.movファイルを監視フォルダ(フォルダ構造を含む)に移動するスクリプトを作成しようとしています。

たとえば、findを使用してファイルを検索できます。

find . -name "*.MOV" -type f 

これは以下を提供します:

./2008/08/CIMG0035.MOV 
./2010/11/IMG_0212.MOV

その後、これら2つのファイルを監視フォルダに移動すると、次のように表示されます。

./videowatch/2008/08/CIMG0035.MOV
./videowatch/2010/11/IMG_0212.MOV

他のすべて(handbrake、icloudpd、cronjobなど)を直接処理できました。

私は利用できる

find . -name "*.MOV" -type f -exec mv '{}' /watchfolder/ \;

これにより、findコマンドによって認識されたすべての.MOVが監視フォルダのデフォルトフォルダに移動さ​​れますが、階層とサブフォルダはありません。したがって、そのフォルダ内のすべてのファイルを年/月ごとに一覧表示するわけではありません。

./videowatch/CIMG0035.MOV 
./videowatch/IMG_0212.MOV 

しかし、それは私が望むものではありません。ファイルがソースフォルダにあるため、年/月のサブフォルダを含める必要があります。

ありがとうございます!

ベストアンサー1

シェルスクリプトを呼び出して、この問題の解決策の1つを使用できます。mvが存在しない場合に移動するディレクトリを作成する方法はありますか?

rsync/を使用して必要なものを同期し、手動で削除することも--includeできます。--exclude

またはfind、ファイルのリストを作成すると、他のすべての操作を実行するスクリプトからそのリストを読み取ることができます(移動も実行します)。このような場合は、mkdir -p動く前にすることが効果的です。

移動したいファイルが完全にダウンロードされたり、ダウンロードされたりしない可能性があることに注意してください。スクリプトを実行するときにクラウドから送信されるかどうかを知る方法が必要です。これを行う方法は、ダウンロードしたツールによって異なります。隠しファイルがあるか、fuser移動したいファイルで作業して見つけることができます。そうしないと、データが失われる危険があります。

おすすめ記事