ディレクトリを整理できないのはなぜですか?

ディレクトリを整理できないのはなぜですか?

busybox version 1.33.0

フォルダ全体をコピーしようとしていますhome

home取り付けられた内部は/dev/sda2/次のとおりです。

/home/user/sda2
/home/user/sda2/root
/home/user/sda2/home_backup

root/上記では、実際に持っているディレクトリを見ることができます。また、 のデータを保存することがあります。sda2/roothome_backup//home

私の質問は次のとおりです

次の行を実行すると、素晴らしいファイルのリストとその/home/user/sda2内容が見つかりません。これが私が望むものです。

LC_ALL=C find /home -path /home/user/sda2 -prune -o -iname '*' -print \;

しかし、次の場合、常にoperation not permittedディレクトリエラーが発生しますroot/(正確に言えば、私は所有者でも一般ユーザーでもありません)。これはsda2、期待どおりにクリーンアップされないことを意味します。

LC_ALL=C find /home -path /home/user/sda2 -prune -o -iname '*' -exec cp -r '{}' /home/user/sda2/home_backup/ ;/

明らかな理由から除外する必要があり、/home/user/sda2同じデータを繰り返しコピーしないでください。

これを確認しても実際に私の質問に対する答えではありませんが、pruneこれがどのように機能するかについてのアイデアを得ることができます。

https://stackoverflow.com/questions/1489277/how-to-use-prune-option-of-find-in-sh/1489405#1489405

編集する

私は前の行ですべてのファイルが一緒に混在していることに気づきましたhome_backupが、それは問題ではありません。なぜ正しく「トリム」できないのかはまだ疑問です。

ベストアンサー1

コマンドにはいくつかの問題があります。しかし、最も重要なことはcp -r
このコマンドは、自分を含むfind /home ... -iname '*'すべてのファイルとディレクトリと一致することです/home。したがって、実行され、対応するcp -r /home /home/user/sda2/home_backup/インストールが含まれます。

これを行う合理的な方法はありませんfind。デフォルトでは、操作に誤ったツールを使用しています。使用rsync-xインストールを繰り返しコピーしないようにオプションを渡します。

rsync -aHAXx /home /home/user/sda2/home_backup

何らかの理由でこの方法がうまくいかない場合、またはrsync本当にそうしたい場合は、findいくつかの手順を実行してこれを行う必要があります。

最初のステップは、ディレクトリ構造を作成することです。

find /home -mount -type d -execdir mkdir -p /home/user/sda2/home_backup/{} \;

-mount代替使用に注意してください-prune。使用できますが、-pruneより-mount簡単です。また、の使用に注意してください-execdir。これは{}絶対パスではなく相対パスで置き換えられるためです。必要に/home/user/sda2/home_backup/home/...応じて使用できます-exec

その後、ファイルをコピーする必要があります

find /home -mount \! -type d -execdir cp -a {} /home/user/sda2/home_backup/{} \;

ファイルを一致させるために、ディレクトリを除くすべてを一致させます。これはシンボリックリンクやパイプなどの非ファイルをコピーします。

これを1つのfindコマンドにまとめることができますが、そうすれば状況がより混乱するだけです。

これらすべてのニュアンスのため、rsyncこれはより良い選択です。

おすすめ記事