目录结构如下:
./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. ./{}/*.*也不行
1
ryd994 2016-01-21 11:50:03 +08:00 1
*补全是 bash 的功能
其实你可以 cp {a,b,c}/* ./all/ 不需要 xargs |
2
oska874 2016-01-21 11:50:32 +08:00 1
find . -name "*.f" | xargs -i sudo cp {} ./all
|
3
kit393 2016-01-21 12:09:08 +08:00 1
各种姿势
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 \; |
4
julyclyde 2016-01-21 12:41:58 +08:00 1
另外,那个目录里如果有“点”开头的文件,*是不会匹配的
你会少复制一些 |
5
zhujinliang 2016-01-21 12:43:33 +08:00 via iPhone
看成了 xargs 的 cp 组合。。。
|
6
yorath 2016-01-21 12:52:13 +08:00 1
zsh only
``` mv **/*.f all ``` |
7
402124773 2016-01-21 17:38:40 +08:00
for n in `... `;do ...;done
有时候比 xargs 好用点,哈哈 |