分页: 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限制,否则还会有问题
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
由 自由建客
竟然没一个人能答上这个问题!
今天终于知道答案了,没想到竟然是 FreeBSD 论坛上的朋友说的!
不说答案先,再给大家一个机会,谁能化简这条命令
代码: 全选
find $SDIR -mindepth 1 -maxdepth 1 -exec cp -R {} $DDIR \;
另外,九楼,我五年前就知道 bsd 用
Re: 汗,复制个文件要搞这么大动静
发表于 : 2011-12-13 23:33
由 枫叶饭团
我在想把 $SDIR的名字改成 $DDIR,然后cp到$DDIR父目录下去会怎么样
Re: 汗,复制个文件要搞这么大动静
发表于 : 2011-12-31 15:57
由 自由建客
代码: 全选
cp -r $SDIR/. $DDIR
Linux 的 cp 用那一点代表所有,很难想到。因为没有 FreeBSD 的 cp 直观。