1

すべてのファイルとdir構造を別のdirにバックアップするbashスクリプトを作成しています。私はそれを行うために次のコードを作成しました:

find . -type f -exec cp {} $HOME/$bdir \; -o -type d -exec mkdir -p {} $HOME/$bdir \; ;

問題は、これはファイルのみをコピーし、dir構造はコピーしないことです。

注:このコードは割り当ての一部であるため、、などをcp -r使用できない場合があります。cp -R

誰かが私を正しい方向に導いてくれることを願っています。;)

ジョエリ

編集:

私はそれを次のように変更しました:

find . -type d -exec mkdir -p $HOME/$bdir/{} \; ;
find . -type f -exec cp {} $HOME/$bdir/{} \; ;

そしてそれは動作します!Tyみんな;)

4

3 に答える 3

1
cd olddir; tar c . | (cd newdir; tar xp)
于 2013-01-05T17:56:55.233 に答える
1

これはrsyncの仕事のように思えます。

あなたはこれが課題だと言います。あなたの制限は何ですか?のみを使用するように制限されていfindますか? 単一のコマンドである必要がありますか?

これを行う 1 つの方法は、2 回のfind呼び出しで行うことです。最初の呼び出しは、ディレクトリのみを検索します。ディレクトリが見つかった場合mkdir、宛先階層内の対応するディレクトリ。2 番目のfind呼び出しはファイルを探し、cp現在持っているようなコマンドを使用します。

また、各ファイル名を取得し、パスを手動で変換して、cpコマンドで使用することもできます。宛先ファイル名を生成する方法の例を次に示します。

> find . -type f | sed -e "s|^\./|/new/dir/|"
/new/dir/file1.txt
/new/dir/file2.txt
/new/dir/dir1/file1_1.txt
/new/dir/dir1/file1_2.txt

目的のために、ソース ファイルを入力として受け取り、 を使用sedして宛先ファイル名を生成し、それらの 2 つのパスを に渡す短い bash スクリプトを作成できますcp。このdirnameコマンドはファイル名のディレクトリ部分を返すため、mkdir -p $(dirname $destination_path)を呼び出す前に宛先ディレクトリが存在することを確認しますcp。このようなスクリプトがあれば、find見つかったすべてのファイルに対してスクリプトを実行するだけです。

于 2013-01-04T21:22:38.610 に答える
0

「-type d」find使用して実行し、最初に「mkdir -p」を実行してから、すべてを1つのコマンドで実行するのではなく、ファイルをコピーすることを見つけることができますか? おそらくmkdir -p $HOME/$bdir/{}である必要があります。

于 2013-01-04T20:51:44.843 に答える