技术解析

xargs 和 cp 组合使用问题请教
0
2021-07-04 23:06:44
idczone

目录结构如下:

./a/a1.f
___/a2.f
___/a3.f ...
./b/b1.f
___/b2.f
___/b3.f ...
./c/c1.f
___/c2.f
___/c3.f ...
./all/

我想将 ./a ./b ./c 目录中的所有文件都拷贝到 ./all 中(只要文件,不要目录),用命令如下:

ls |xargs -n1 -i sudo cp ./{}/* ./dbs/

然后 cp 就报错:

cp :无法获取“./a/*”的文件状态( stat ):没有那个文件或目录

cp 把 "./a/*" 当作一个文件了????

ps. ./{}/*.*也不行


*补全是 bash 的功能
其实你可以 cp {a,b,c}/* ./all/
不需要 xargs

find . -name "*.f" | xargs -i sudo cp {} ./all

各种姿势
find ./{a,b,c}/ -type f -exec mv -vi {} ./all \;
cp -vip {a,b,c}/* all/
find ./{a,b,c}/ -type f | xargs -I{} cp {} ./all \;

另外,那个目录里如果有“点”开头的文件,*是不会匹配的
你会少复制一些

看成了 xargs 的 cp 组合。。。

zsh only
```
mv **/*.f all
```

for n in `... `;do ...;done
有时候比 xargs 好用点,哈哈

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服