求助:递归拷贝文件如何在目标目录下自动建立原目录

sh/bash/dash/ksh/zsh等Shell脚本
回复
yubinalice
帖子: 197
注册时间: 2015-12-23 16:20
系统: ubuntu 16.04

求助:递归拷贝文件如何在目标目录下自动建立原目录

#1

帖子 yubinalice » 2021-10-02 10:35

刚刚写了这样一个脚本,是递归dd文件的。我们都知道dd的速度是最快的。

如下:

#!/bin/bash
dd-r()
{
for i in `ls "$1"`
do
if [ -d "$1"/"$i" ]
then
mkdir -p "$2"/"$i"
dd-r "$1"/"$i" "$2"/"$i"
else
dd if="$1"/"$i" of="$2"/"$i" bs=10M oflag=direct,nonblock status=progress
fi
done
}
dd-r . '/run/media/root/Seagate Expansion Drive/youku2'

——————————————————————————————————————————————————————

然而,这个脚本还是再完善一下好了。

比如,源目录是dir1,目标目录是dir2,那么高手看看如何让他在目标位置自动创建dir1。

我之前曾经试过,

mkdir -r "$2"/"`basename "$1"`"/"$i"

of="$2"/"`basename "$1"`"/$i

这个选项,然而,却意外的失败了。

对于这种递归,我不是特别的懂咋回事。

高手帮我看看,如何让他在目标位置自动创建源目录,就跟fastcopy似的。

fastcopy的速度比不上dd,差的很多。
头像
lilydjwg
论坛版主
帖子: 4249
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 求助:递归拷贝文件如何在目标目录下自动建立原目录

#2

帖子 lilydjwg » 2021-10-02 10:51

噗,谁告诉你的呀。还加上 direct 的标志呢,在写端,倒是问题不大。

cp -r --reflink src dst 不好吗?cp 有那么多选项,还能帮你保留文件权限和时间戳等信息呢。

真要写 shell 脚本的话,shellcheck 了解一下?
头像
百草谷居士
帖子: 3921
注册时间: 2006-02-10 16:36
系统: Mint21.1/Deepin20.8

Re: 求助:递归拷贝文件如何在目标目录下自动建立原目录

#3

帖子 百草谷居士 » 2021-10-02 11:14

靠!你发帖是递归,还是循环?搞了一长串!
debian 12 / 深度系统 20.9 / Mint 21.3

为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
头像
oneleaf
论坛管理员
帖子: 10441
注册时间: 2005-03-27 0:06
系统: Ubuntu 12.04

Re: 求助:递归拷贝文件如何在目标目录下自动建立原目录

#4

帖子 oneleaf » 2021-10-05 20:06

拷贝大量文件 rsync 才是最快的,不需要递归。
yubinalice
帖子: 197
注册时间: 2015-12-23 16:20
系统: ubuntu 16.04

Re: 求助:递归拷贝文件如何在目标目录下自动建立原目录

#5

帖子 yubinalice » 2021-10-31 9:43

百草谷居士 写了: 2021-10-02 11:14 靠!你发帖是递归,还是循环?搞了一长串!
这个脚本是用dd递归复制一个目录及所有子目录的。

然而,必须先在目标位置建立与源目录根目录同名的文件夹,

然而,在fastcopy里面则只要选择源位置目标位置就成。

那么,如何才能让他自动自动建立源目录同名目录?

我的方案是

basename 源目录

然而,在不涉及递归的时候,这个很正常,然而,当引入递归之后,貌似每层他都要建立。因此就失败了。

我是想让他自动在目标位置建立与源目录同名的目录。

之前都是手动建立的。
回复