我正在制作一个bash脚本,它应该将所有文件和目录结构备份到另一个目录。 我做了以下代码:
find . -type f -exec cp {} $HOME/$bdir \; -o -type d -exec mkdir -p {} $HOME/$bdir \; ;
问题是,这只是复制文件而不是dir结构。
注意:我可能不会使用cp -r
,cp -R
或类似的内容,因为此代码是作业的一部分。
我希望有人能把我推向正确的方向。 ;)
Joeri
编辑:
我把它改为:
find . -type d -exec mkdir -p $HOME/$bdir/{} \; ;
find . -type f -exec cp {} $HOME/$bdir/{} \; ;
它有效! Ty们;)
答案 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
生成目标文件名,然后将这两个路径传递给cp
。 dirname
命令将返回文件名的目录部分,因此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 / {} 。