日付別に構成されたディレクトリには、多くの.CR2ファイルと.ARWファイルが混在しています(2016にはフォルダ06と07があり、その中に毎日フォルダがあります。たとえば、ファイルは2016/06/03にあります)。
構造を維持しながら、.ARWファイルを別のフォルダに抽出したいと思います。可能ですか?
つまり、同じ構造の2つの2016フォルダが必要ですが、そのうちの1つには.ARWファイルのみがあり、1つには.CR2ファイルのみが必要です。
答え1
これらのrsyncコマンドは要件を満たす必要があります。
これによりARWが実行されます。
rsync -arvz --progress --include='*.ARW' --include="*/" --exclude="*" ./source-dir-2016 ./target-ARW-2016
これはCR2を実行します
rsync -arvz --progress --include='*.CR2' --include="*/" --exclude="*" ./source-dir-2016 ./target-CR2-2016
使ったこの投稿情報のソースとして。
答え2
find
exec
私は以下を使用する代替案を提案したいと思います。cp --parents
find ./ -name *.ARW -exec cp --parents {} /home/user/target-ARW-dir/ \;
find ./ -name *.CR2 -exec cp --parents {} /home/user/target-CR2-dir/ \;
これに対する制限は、作業ディレクトリがコピーするファイル構造の上にある必要があることです。
それが何をするかについてのアイデア:
find
ファイルを探す
./
検索するディレクトリ
-name *.ARW
.ARW で終わるファイルのみ一覧表示
-exec
返されたファイルのリストからコマンドを実行します。
cp --parents
ディレクトリ構造のコピーとメンテナンス
{}
ファイル別レポートに拡張すると、次のようにfind
なります。x
for x in $files
/home/user/target-ARW-dir/
ただサンプルディレクトリなので、実際に必要なディレクトリに変更する必要があります。
\;
find -exec
forループのように動作するようにaを終了する正しい方法
答え3
cp
dirからaに再帰的に移動して2016
からmainから始める2016_ARW
のはどうですか?rm *.CR2
rm *.ARW
例えば
user:~$ ls 2016/06/03/
file_one.ARW file_two.CR2 file_three.CR2 file_four.ARW file_five.ARW
user:~$ cp -R 2016 2016_ARW
user:~$ rm 2016_ARW/06/03/*.CR2
user:~$ rm 2016/06/03/*.ARW
user:~$ ls 2016/06/03/
file_two.CR2 file_three.CR2
user:~$ ls 2016_ARW/06/03/
file_one.ARW file_four.ARW file_five.ARW