今、windowsにて
aaa----bbbb
|__cccc
|__dddd---eeee
などのフォルダがいくつもあり、
このなかで、ccccフォルダとeeeeフォルダの一部のファイルだけを上書きしないという条件をつけて
コピーをしたいのですが、バッチPGMを組むしか方法ないでしょうか。
なんかツールでできないでしょうか。
ご存知のかたよろしくお願いいたします。
Ant というコマンドラインベースのツールがあります。
java のビルドに使われます。
http://ant.apache.org/
色々なことができて、ファイルのコピーもその一部です。
http://www.javadrive.jp/ant/copy/index2.html
↑リファレンスよりは、ちょっと読みやすいはず。
質問の文面だとインデントが崩れてますが、ディレクトリの階層はこんな感じでしょうか。
aaa ├ bbbb ├ cccc └ dddd └ eeee
こういう構成のディレクトリから、
という場合、以下のようなビルドファイルを用意して ant を実行します。。
<?xml version="1.0" encoding="Shift_JIS"?> <project name="my_project" default="do_copy"> <target name="do_copy"> <copy todir="./dest"> <fileset dir="./aaa"> <!-- とりあえず、全てのファイルをコピー対象 --> <include name="**/*" /> <!-- そのうち、コピーしないものを個別に指定 --> <exclude name="cccc/**/*" /> <exclude name="dddd/eeee/not_copy_no1.txt" /> <exclude name="dddd/eeee/not_copy_no2.log" /> <exclude name="dddd/eeee/*.bak" /> </fileset> </copy> </target> </project>
面倒そうな感じがする分、指定は細かくできます。
プログラムを書くよりは、ちょっとは楽です。
Windows でも Linux 系でも行けます。もちろん、Mac も。
対象外にする条件というのが、それほど複雑でなければ rsync とか FastCopy や robocopy という方法もあるかも。
rsync は、Windows で動かすところまでもってくのが面倒。
FastCopy や robocopy は、Windows 限定というところをどう考えるかだと思います。
その「上書きしたくない一部のファイル」は、具体的にどのような条件をつけて指定したいのでしょうか?また、この処理は1回だけ行うのでしょうか、それとも定期的に行うのでしょうか?。そのあたりが分からないと、適切な回答は困難かと思われます。
上書きしたくないファイルが限定されており、なおかつ1回だけ行うなら、単純に「そのファイルを一旦退避しておき、全体を上書きコピーした後に書き戻す」ようにすれば終わりかと。
あるいは、上書きしたくないファイルだけを読み取り専用属性にしてから全体コピーするという手も考えられますが。
すいませんが、そのご説明でも、具体的にどうしたいのかが全く分かりません
「上書きしたくないファイル、フォルダ」というのは、個別に一つ一つGUIで設定したいということですか?
またその設定は恒久的な物ですか?それともコピーを行う度に変動するのですか?
「ファイルパスは都度かわる」というのは、コピー元とコピー先の双方が変わるのですか?
と言うか、要件定義できていないようですので、要件を並べるより「どういう事情でそれをしたいのか」を具体的に説明される方が話が早いのではないかと思われますが。
環境を説明すべきでした。
ご回答いただいたのに申し訳ありませんでした。
よろしくお願いいたします。
Ant というコマンドラインベースのツールがあります。
java のビルドに使われます。
http://ant.apache.org/
色々なことができて、ファイルのコピーもその一部です。
http://www.javadrive.jp/ant/copy/index2.html
↑リファレンスよりは、ちょっと読みやすいはず。
質問の文面だとインデントが崩れてますが、ディレクトリの階層はこんな感じでしょうか。
aaa ├ bbbb ├ cccc └ dddd └ eeee
こういう構成のディレクトリから、
という場合、以下のようなビルドファイルを用意して ant を実行します。。
<?xml version="1.0" encoding="Shift_JIS"?> <project name="my_project" default="do_copy"> <target name="do_copy"> <copy todir="./dest"> <fileset dir="./aaa"> <!-- とりあえず、全てのファイルをコピー対象 --> <include name="**/*" /> <!-- そのうち、コピーしないものを個別に指定 --> <exclude name="cccc/**/*" /> <exclude name="dddd/eeee/not_copy_no1.txt" /> <exclude name="dddd/eeee/not_copy_no2.log" /> <exclude name="dddd/eeee/*.bak" /> </fileset> </copy> </target> </project>
面倒そうな感じがする分、指定は細かくできます。
プログラムを書くよりは、ちょっとは楽です。
Windows でも Linux 系でも行けます。もちろん、Mac も。
対象外にする条件というのが、それほど複雑でなければ rsync とか FastCopy や robocopy という方法もあるかも。
rsync は、Windows で動かすところまでもってくのが面倒。
FastCopy や robocopy は、Windows 限定というところをどう考えるかだと思います。
いつもご回答ありがとうございます。
Apacheでできるんですね。。
ありがとうございました。
Apache のプロジェクトのひとつですが、Webサーバとして Apache を立ち上げていない環境でも、単独のツールとして使えます。
Ant は java で実装されているので、JRE (java runtime) の導入は必要ですが、java が実行できる環境であれば OS を選びません。
# ビルドファイルの表現は、多少変わるでしょうけれど。
いつもご回答ありがとうございます。
2015/11/25 09:41:50Apacheでできるんですね。。
ありがとうございました。
Apache のプロジェクトのひとつですが、Webサーバとして Apache を立ち上げていない環境でも、単独のツールとして使えます。
2015/11/25 09:54:10Ant は java で実装されているので、JRE (java runtime) の導入は必要ですが、java が実行できる環境であれば OS を選びません。
# ビルドファイルの表現は、多少変わるでしょうけれど。