汗,复制个文件要搞这么大动静

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

汗,复制个文件要搞这么大动静

#1

帖子 自由建客 » 2010-10-13 21:10

将 $SDIR 中的所有文件,包括隐藏文件,包括 .a 之类文件名只有两字符的隐藏文件,复制到早已存在的 $DDIR 中。
cp -R $SDIR $DDIR 是不行的,因为 $SDIR 的副本成了 $DDIR 的子目录。
研究实验了一番,最后搞出一条如此大动作的命令,有没有更简单的方法?

代码: 全选

find $SDIR -mindepth 1 -maxdepth 1 -exec cp -R {} $DDIR \;
天啦!还一定要加 -mindepth 1 -maxdepth 1限制,否则还会有问题 :em20
上次由 自由建客 在 2011-05-20 20:16,总共编辑 4 次。
delectate
帖子: 18311
注册时间: 2008-01-09 22:41

Re: 汗,复制个文件要搞这么大动静

#2

帖子 delectate » 2010-10-13 21:15

rsync过去,要不就mv过去呗
头像
pityonline
帖子: 3864
注册时间: 2008-12-09 12:44
来自: 北京
联系:

Re: 汗,复制个文件要搞这么大动静

#3

帖子 pityonline » 2010-10-13 21:18

代码: 全选

cp -r $SDIR/* $DDIR
这个不行吗?
Pity is the bomp!
活着就是折腾!生命不息,折腾不止!
看这帮家伙在干什么?@pityonline/u
Dropbox+Vps+PC 跑起来了!这是邀请链接
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: 汗,复制个文件要搞这么大动静

#4

帖子 自由建客 » 2010-10-13 21:26

rsync 可能没安装,写在脚本里不通用。

代码: 全选

cp -r $SDIR/* $DDIR
不行,$SDIR 下的隐藏文件会飘过。用 .* 会严重错误,因为父目录会被匹配进去。用.??* 绕过匹配父目录,但 .a .b .c 之类就两个字符的文件将再度飘过。
头像
pityonline
帖子: 3864
注册时间: 2008-12-09 12:44
来自: 北京
联系:

Re: 汗,复制个文件要搞这么大动静

#5

帖子 pityonline » 2010-10-13 22:49

自由建客 写了:rsync 可能没安装,写在脚本里不通用。

代码: 全选

cp -r $SDIR/* $DDIR
不行,$SDIR 下的隐藏文件会飘过。用 .* 会严重错误,因为父目录会被匹配进去。用.??* 绕过匹配父目录,但 .a .b .c 之类就两个字符的文件将再度飘过。
果然是这样,可以图形界面操作吗?在这个问题上应该比命令行容易些……
Pity is the bomp!
活着就是折腾!生命不息,折腾不止!
看这帮家伙在干什么?@pityonline/u
Dropbox+Vps+PC 跑起来了!这是邀请链接
头像
懒蜗牛Gentoo
论坛版主
帖子: 7351
注册时间: 2007-03-02 17:36
系统: Linux Mint

Re: 汗,复制个文件要搞这么大动静

#6

帖子 懒蜗牛Gentoo » 2010-10-14 8:50

cp -a $SDIR/* $DDIR
虽然世上没有完美的东西,但这并不影响我们追求完美,因为只有偏执狂才TMD能成功。
10.04新手入门——笨兔兔讲述自己的故事
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 汗,复制个文件要搞这么大动静

#7

帖子 eexpress » 2010-10-14 9:13

没见这样较劲的。
find本来就要限制深度,谁叫你要复制到子目录。

换个目录多好。折腾啥。再移动回来,瞬间的事情而已。

脑袋短路了。
● 鸣学
billbear
帖子: 3681
注册时间: 2008-05-03 23:42

Re: 汗,复制个文件要搞这么大动静

#8

帖子 billbear » 2010-10-14 9:51

懒蜗牛Gentoo 写了:cp -a $SDIR/* $DDIR
头像
susbarbatus
帖子: 2966
注册时间: 2010-04-10 16:14
系统: Arch Linux

Re: 汗,复制个文件要搞这么大动静

#9

帖子 susbarbatus » 2010-10-14 10:04

记得bsd有个cpdup..
沉迷将棋中……
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: 汗,复制个文件要搞这么大动静

#10

帖子 自由建客 » 2010-10-14 18:07

懒蜗牛Gentoo 写了:cp -a $SDIR/* $DDIR

代码: 全选

>0< urd$ SDIR=/etc/skel

>0< urd$ DDIR=test

>0< urd$ ls -A $SDIR
.bash_logout  .bashrc  .profile

>0< urd$ mkdir $DDIR

>0< urd$ cp -a $SDIR/* $DDIR
cp: 无法获取"/etc/skel/*" 的文件状态(stat): 没有那个文件或目录

>1< urd$
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: 汗,复制个文件要搞这么大动静

#11

帖子 自由建客 » 2010-10-14 18:10

eexpress 写了:没见这样较劲的。
find本来就要限制深度,谁叫你要复制到子目录。

换个目录多好。折腾啥。再移动回来,瞬间的事情而已。

脑袋短路了。
要是复制 /etc/skel 下的文件到新用户主目录你怎么搞?
/usr/sbin/adduser 中的方法写得太复杂了,没看懂。

貌似牵涉到群文件操作的都离不开 find 比如

代码: 全选

find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
就连 /etc/init.d/sudo 中都是这么一句

代码: 全选

find /var/lib/sudo -exec touch -t 198501010000 '{}' \;
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: 汗,复制个文件要搞这么大动静

#12

帖子 自由建客 » 2010-10-19 21:11

进一步研究结果

代码: 全选

# sh/bash
cp -r $SDIR/{.[!.]*,*} $DDIR

# csh/tcsh
cp -r $SDIR/{.[^.]*,*} $DDIR
-----------------------------
其实这个还是不可靠
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: 汗,复制个文件要搞这么大动静

#13

帖子 自由建客 » 2011-12-13 22:59

竟然没一个人能答上这个问题! :em20 :em36
今天终于知道答案了,没想到竟然是 FreeBSD 论坛上的朋友说的! :em39
不说答案先,再给大家一个机会,谁能化简这条命令

代码: 全选

find $SDIR -mindepth 1 -maxdepth 1 -exec cp -R {} $DDIR \;
另外,九楼,我五年前就知道 bsd 用

代码: 全选

cp -r $SDIR/ $DDIR
头像
枫叶饭团
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
联系:

Re: 汗,复制个文件要搞这么大动静

#14

帖子 枫叶饭团 » 2011-12-13 23:33

我在想把 $SDIR的名字改成 $DDIR,然后cp到$DDIR父目录下去会怎么样
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: 汗,复制个文件要搞这么大动静

#15

帖子 自由建客 » 2011-12-31 15:57

代码: 全选

cp -r $SDIR/. $DDIR
Linux 的 cp 用那一点代表所有,很难想到。因为没有 FreeBSD 的 cp 直观。
回复