1

我正在制作一个 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/{} \; ;

它有效!泰家伙;)

4

3 回答 3

1

这听起来像是rsync的工作。

你提到这是一项任务。你有什么限制?您是否仅限于使用find?它必须是一个命令吗?

一种方法是在两次find调用中进行。第一次调用只查找目录。找到mkdir目录时,目标层次结构中的相应目录。第二个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

出于您的目的,您可以编写一个简短的 bash 脚本,将源文件作为输入,用于sed生成目标文件名,然后将这两个路径传递给cp. 该dirname命令将返回文件名的目录部分,因此mkdir -p $(dirname $destination_path)在您调用cp. 有了这样的脚本,您可以简单地find为找到的每个文件执行脚本。

于 2013-01-04T21:22:38.610 回答
1
cd olddir; tar c . | (cd newdir; tar xp)
于 2013-01-05T17:56:55.233 回答
0

您可以先find使用“-type d”并执行“mkdir -p”,然后再找到复制文件而不是将其全部包含在一个命令中的结果吗?它可能也应该是mkdir -p $HOME/$bdir/{}

于 2013-01-04T20:51:44.843 回答