使用dir结构bash脚本备份文件

时间:2013-01-04 20:47:12

标签: linux bash find backup

我正在制作一个bash脚本,它应该将所有文件和目录结构备份到另一个目录。 我做了以下代码:

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

问题是,这只是复制文件而不是dir结构。

注意:我可能不会使用cp -rcp -R或类似的内容,因为此代码是作业的一部分。

我希望有人能把我推向正确的方向。 ;)

Joeri

编辑:

我把它改为:

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

它有效! Ty们;)

3 个答案:

答案 0 :(得分: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生成目标文件名,然后将这两个路径传递给cpdirname命令将返回文件名的目录部分,因此mkdir -p $(dirname $destination_path)将确保在调用cp之前目标目录存在。使用这样的脚本,你可以让find为它找到的每个文件执行脚本。

答案 1 :(得分:1)

cd olddir; tar c . | (cd newdir; tar xp)

答案 2 :(得分:0)

您可以先使用进行find - 输入d“并首先执行”mkdir -p“,然后执行复制文件的查找而不是把它全部放在一个命令中?它应该也可能是 mkdir -p $ HOME / $ bdir / {}