分页: 1 / 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

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

发表于 : 2010-10-13 21:15
delectate
rsync过去,要不就mv过去呗

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

发表于 : 2010-10-13 21:18
pityonline

代码: 全选

cp -r $SDIR/* $DDIR
这个不行吗?

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

发表于 : 2010-10-13 21:26
自由建客
rsync 可能没安装,写在脚本里不通用。

代码: 全选

cp -r $SDIR/* $DDIR
不行,$SDIR 下的隐藏文件会飘过。用 .* 会严重错误,因为父目录会被匹配进去。用.??* 绕过匹配父目录,但 .a .b .c 之类就两个字符的文件将再度飘过。

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

发表于 : 2010-10-13 22:49
pityonline
自由建客 写了:rsync 可能没安装,写在脚本里不通用。

代码: 全选

cp -r $SDIR/* $DDIR
不行,$SDIR 下的隐藏文件会飘过。用 .* 会严重错误,因为父目录会被匹配进去。用.??* 绕过匹配父目录,但 .a .b .c 之类就两个字符的文件将再度飘过。
果然是这样,可以图形界面操作吗?在这个问题上应该比命令行容易些……

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

发表于 : 2010-10-14 8:50
懒蜗牛Gentoo
cp -a $SDIR/* $DDIR

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

发表于 : 2010-10-14 9:13
eexpress
没见这样较劲的。
find本来就要限制深度,谁叫你要复制到子目录。

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

脑袋短路了。

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

发表于 : 2010-10-14 9:51
billbear
懒蜗牛Gentoo 写了:cp -a $SDIR/* $DDIR

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

发表于 : 2010-10-14 10:04
susbarbatus
记得bsd有个cpdup..

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

发表于 : 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$

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

发表于 : 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 '{}' \;

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

发表于 : 2010-10-19 21:11
自由建客
进一步研究结果

代码: 全选

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

# csh/tcsh
cp -r $SDIR/{.[^.]*,*} $DDIR
-----------------------------
其实这个还是不可靠

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

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

代码: 全选

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

代码: 全选

cp -r $SDIR/ $DDIR

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

发表于 : 2011-12-13 23:33
枫叶饭团
我在想把 $SDIR的名字改成 $DDIR,然后cp到$DDIR父目录下去会怎么样

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

发表于 : 2011-12-31 15:57
自由建客

代码: 全选

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