linux cp命令,如何复制多个目录下文件到 对应多个目录下面

比如 /home/a/文件1 到 /mnt/a/
/home/a/文件2 到 /mnt/a/
/home/b/文件3 到 /mnt/b/
/home/b/文件4 到 /mnt/b/

类似这个意思:cp /home/*/* /mnt/*/ (当然这句是错误的不能实现上面要求,只是用来表达个意思)
实际句子是:cp -fv /mnt/data/file.bk/*/*/csvZip/* /mnt/www/html/*/*/csvZip/
通配文件夹下面还有特定的csvZip文件夹, 如果直接一个* 会把csvZip之外的文件夹内容也复制过去。

如果后面的两个通配符* 能引用前面的两个*的值就能解决问题了,如何引用

简单的办法是采用打包再解包
如:
cd /mnt/data/file.bk
tar cvf /tmp/bakfile.tar */*/csvZip
然后/mnt/www/html
tar xvf /tmp/bakfile.tar
只是这样要求磁盘空间要足够才可以!

另一种办法是写shell脚本进行操作
cd /mnt/data/file.bk
for dir in `find . -type d -name "csvZip"`
do
cp $dir/* /mnt/www/html/$dir
done追问

这倒确实能实现,可惜文件太多,1T左右全是小文件,估计得花好几天。。。。。

追答

另一种办法是写shell脚本进行操作
cd /mnt/data/file.bk
for dir in `find . -type d -name "csvZip"`
do
cp $dir/* /mnt/www/html/$dir
done

追问

恩我先去测试下脚本

追答以下为测试脚本,为了让你看清每一个命令,把以下写到一个文件,如:test.sh
#!/bin/bash
cd /mnt/data/file.bk
for dir in `find . -type d -name "csvZip"`
do
    echo " $dir/*  /mnt/www/html/$dir "
done
保存后,执行
$sh ./test.sh

追问

测试了几个案例,应该可以用。 多谢,有问题再请教你

追答

不客气

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-02-04

1、打开SecureCRT,选择要登录的系统IP地址, 点击连接。

2、出现下图的界面说明连接成功。

3、然后我们使用cd 命名切换到要复制的文件所在的目录,比如说目录/123。

4、然后我们使用ls 命令列出文件夹里面的文件, 比如说目录123里面的123.txt 文件。

5、通过命令我们可以看到456目录里面是空的。

6、假如我们要把123.txt 复制到456文件夹里面,那么就使用命令cp 要复制的文件的路径 要复制到的文件夹路径,如下图所示,把123.txt 复制到456文件夹 ,然后ls 查看已经复制成功了。

本回答被网友采纳
第2个回答  2014-09-22
这事。。。在干嘛?
已经解决了是吗?
是有所问必有所答。。。追问

没解决,在线等

追答

同时将文件file1、file2、file3与目录dir1复制到dir2
   cp -R file1 file2 file3 dir1 dir2

用cp -Rvf

追问

几万个文件,必须用通配。
/mnt/data/file.bk/*/*/csvZip/这里很多文件

去覆盖
/mnt/www/html/*/*/csvZip/这里很多同名文件

追答

/*/*/ 是什么意思?
我只用过 cp -Rfv /mnt/data/file.bk/* /mnt/www/html/*
好像
cp -Rfv /mnt/data/file.bk/ /mnt/www/html/也可以

追问

/*/*/ 这个是匹配 类似 /abc/cba/ 这样的目录的。

追答

那你直接进csvZip目录,将其文件复制到目标目录就可。

追问

/*/*/ 能匹配到好多目录,这些目录下都有csvZip这样的子目录,没法手动进去cp

第3个回答  2014-09-22
cp /home/* /mnt/

呢?追问

实际句子是:cp -fv /mnt/data/file.bk/*/*/csvZip/* /mnt/www/html/*/*/csvZip/
通配文件夹下面还有特定的csvZip文件夹, 如果直接一个* 会把csvZip之外的文件夹内容也复制过去。

相似回答