xargs 和 cp 组合使用问题请教

2016-01-21 11:45:58 +08:00
 frozenshadow

目录结构如下:

./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. ./{}/*.*也不行

4086 次点击
所在节点    Linux
7 条回复
ryd994
2016-01-21 11:50:03 +08:00
*补全是 bash 的功能
其实你可以 cp {a,b,c}/* ./all/
不需要 xargs
oska874
2016-01-21 11:50:32 +08:00
find . -name "*.f" | xargs -i sudo cp {} ./all
kit393
2016-01-21 12:09:08 +08:00
各种姿势

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 \;
julyclyde
2016-01-21 12:41:58 +08:00
另外,那个目录里如果有“点”开头的文件,*是不会匹配的
你会少复制一些
zhujinliang
2016-01-21 12:43:33 +08:00
看成了 xargs 的 cp 组合。。。
yorath
2016-01-21 12:52:13 +08:00
zsh only
```
mv **/*.f all
```
402124773
2016-01-21 17:38:40 +08:00
for n in `... `;do ...;done
有时候比 xargs 好用点,哈哈

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/252315

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX