系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的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限制,否则还会有问题
上次由
自由建客 在 2011-05-20 20:16,总共编辑 4 次。
-
自由建客
- 帖子: 13468
- 注册时间: 2008-07-30 23:21
- 系统: Debian stable AMD64
#4
帖子
由 自由建客 » 2010-10-13 21:26
rsync 可能没安装,写在脚本里不通用。
代码: 全选
cp -r $SDIR/* $DDIR
不行,$SDIR 下的隐藏文件会飘过。用 .* 会严重错误,因为父目录会被匹配进去。用.??* 绕过匹配父目录,但 .a .b .c 之类就两个字符的文件将再度飘过。
-
pityonline
- 帖子: 3864
- 注册时间: 2008-12-09 12:44
- 来自: 北京
-
联系:
#5
帖子
由 pityonline » 2010-10-13 22:49
自由建客 写了:rsync 可能没安装,写在脚本里不通用。
代码: 全选
cp -r $SDIR/* $DDIR
不行,$SDIR 下的隐藏文件会飘过。用 .* 会严重错误,因为父目录会被匹配进去。用.??* 绕过匹配父目录,但 .a .b .c 之类就两个字符的文件将再度飘过。
果然是这样,可以图形界面操作吗?在这个问题上应该比命令行容易些……
-
懒蜗牛Gentoo
- 论坛版主
- 帖子: 7353
- 注册时间: 2007-03-02 17:36
- 系统: Linux Mint
#6
帖子
由 懒蜗牛Gentoo » 2010-10-14 8:50
cp -a $SDIR/* $DDIR
-
eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
#7
帖子
由 eexpress » 2010-10-14 9:13
没见这样较劲的。
find本来就要限制深度,谁叫你要复制到子目录。
换个目录多好。折腾啥。再移动回来,瞬间的事情而已。
脑袋短路了。
● 鸣学
-
billbear
- 帖子: 3681
- 注册时间: 2008-05-03 23:42
#8
帖子
由 billbear » 2010-10-14 9:51
懒蜗牛Gentoo 写了:cp -a $SDIR/* $DDIR
-
自由建客
- 帖子: 13468
- 注册时间: 2008-07-30 23:21
- 系统: Debian stable AMD64
#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
#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
#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
#13
帖子
由 自由建客 » 2011-12-13 22:59
竟然没一个人能答上这个问题!
今天终于知道答案了,没想到竟然是 FreeBSD 论坛上的朋友说的!
不说答案先,再给大家一个机会,谁能化简这条命令
代码: 全选
find $SDIR -mindepth 1 -maxdepth 1 -exec cp -R {} $DDIR \;
另外,九楼,我五年前就知道 bsd 用
-
枫叶饭团
- 帖子: 14683
- 注册时间: 2010-06-16 1:05
- 系统: Mac OS X
- 来自: Tencent
-
联系:
#14
帖子
由 枫叶饭团 » 2011-12-13 23:33
我在想把 $SDIR的名字改成 $DDIR,然后cp到$DDIR父目录下去会怎么样
-
自由建客
- 帖子: 13468
- 注册时间: 2008-07-30 23:21
- 系统: Debian stable AMD64
#15
帖子
由 自由建客 » 2011-12-31 15:57
代码: 全选
cp -r $SDIR/. $DDIR
Linux 的 cp 用那一点代表所有,很难想到。因为没有 FreeBSD 的 cp 直观。