私が望むのは、ファイル(およびサブフォルダ)が特定のフォルダに追加されたときに移動することですが、ソースとターゲットでは元のフォルダ構造を維持したいと思います。私はこれが例えば簡単に説明できると信じています。次のフォルダ/ファイル構造を想像してください。
/source/foo/bar1
/source/bar2
/dest
次のフォルダ/ファイル構造を保持したいと思います。
/source/foo
/dest/foo/bar1
/dest/bar2
これを自動的に行う方法はありますか?ご回答ありがとうございます。
答え1
rsync
すべてをコピーしてから、ソースからディレクトリを除くすべてを削除するために使用されます。たとえば、次のようにします(source
ファイルを含むディレクトリとbar2
ファイルを含むサブディレクトリ)。foo
source/foo/bar2
$ tree source/
source/
├── bar2
└── foo
└── bar1
1 directory, 2 files
次を実行します。
rsync -r source/ dest/
これにより、以下が生成されます。
$ tree dest/
dest/
├── bar2
└── foo
└── bar1
1 directory, 2 files
ディレクトリ以外のすべてのエントリを削除しますsource
。
find source/ -not -type d -delete
またfind
はない場合は、以下を-delete
使用してください。
find source/ ! -type d -exec rm {} +
自動化するには、次のような小さなスクリプトを作成します。
#!/bin/sh
source="$1"
dest="$2"
rsync -r "$source"/ "$dest"/
find "$source"/ -not -type d -delete
スクリプトを実行可能にし、ソースディレクトリとターゲットディレクトリを引数として使用して実行します。
foo.sh /source /dest