马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
欢迎大家来到仓酷云论坛!明天在编写一个剧本的时分,发明一个对照奇异的成绩:就是在利用cp拷贝以后目次下一切文件到方针目次的时分,源和方针目次巨细分歧。本来一向没有寄望有如许的成绩,厥后查了些材料,才晓得之前一向利用的格局有误,。
1、准备
cp就是拷贝,最复杂的利用体例就是:
cpoldfilenewfile
但如许只能拷贝文件,不克不及拷贝目次,以是一般用:
cp-rold/new/
那就会把old目次全部拷贝到new目次下。注重,不是把old目次内里的文件拷贝到new目次,而是把old间接拷贝到new上面,了局是:
援用
[root@dc5test]#llnew/
total4
drwxr-xr-x2rootroot4096Dec1511:55old
那假如要坚持源文件的一切权限,能够如许:
cp-rpold/new/
-p参数,能够坚持权限、宿主、工夫栈,还大概包含link等;另有更复杂的,就是用:
cp-aold/new/
-a参数,就即是-dpR。
2、成绩1
好,我们来看看此次的成绩。情况是:
◎两个目次:old、new,个中old内里有个三个内容:test1文件、test2目次,另有就是.test3,这是一个隐含文件。
援用
[root@dc5test]#ll-laR
.:
total20
drwxr-xr-x4rootroot4096Dec1511:55.
drwxrwxrwt7rootroot4096Dec1511:59..
drwxr-xr-x2rootroot4096Dec1512:14new
drwxr-xr-x3rootroot4096Dec1512:14old
./new:
total8
drwxr-xr-x2rootroot4096Dec1512:14.
drwxr-xr-x4rootroot4096Dec1511:55..
./old:
total12
drwxr-xr-x3rootroot4096Dec1512:14.
drwxr-xr-x4rootroot4096Dec1511:55..
-rw-r--r--1rootroot0Dec1512:07.test3
-rw-r--r--1rootroot0Dec1512:05test1
drwxr-xr-x2rootroot4096Dec1512:14test2
./old/test2:
total8
drwxr-xr-x2rootroot4096Dec1512:14.
drwxr-xr-x3rootroot4096Dec1512:14..
◎操纵一:
援用
[root@dc5test]#cp-aold/*new/
[root@dc5test]#ll-laRnew/
new/:
total12
drwxr-xr-x3rootroot4096Dec1512:15.
drwxr-xr-x4rootroot4096Dec1511:55..
-rw-r--r--1rootroot0Dec1512:05test1
drwxr-xr-x2rootroot4096Dec1512:14test2
new/test2:
total8
drwxr-xr-x2rootroot4096Dec1512:14.
drwxr-xr-x3rootroot4096Dec1512:15..
成绩出来了:隐含的.test3文件没有一齐拷贝到new目次下。
缘故原由是:*参数利用不准确。如许的写法,一般都是由于熟习了已往Dos的格局(包含我本人),而实践在bash情况下,cp利用*是不克不及婚配相似.开首的隐含文件的。
◎操纵二
准确的写法应当如许:
援用
[root@dc5test]#cp-aold/.new/
[root@dc5test]#ll-laRnew/
new/:
total12
drwxr-xr-x3rootroot4096Dec1512:14.
drwxr-xr-x4rootroot4096Dec1511:55..
-rw-r--r--1rootroot0Dec1512:07.test3
-rw-r--r--1rootroot0Dec1512:05test1
drwxr-xr-x2rootroot4096Dec1512:14test2
new/test2:
total8
drwxr-xr-x2rootroot4096Dec1512:14.
drwxr-xr-x3rootroot4096Dec1512:14..
不必*号,而用.号取代。
另有一种对照庞大一些的写法:
援用
[root@dc5test]#cp-aold/*old/.[^.]*new/
[root@dc5test]#ll-laRnew/
new/:
total12
drwxr-xr-x3rootroot4096Dec1512:25.
drwxr-xr-x4rootroot4096Dec1511:55..
-rw-r--r--1rootroot0Dec1512:07.test3
-rw-r--r--1rootroot0Dec1512:05test1
drwxr-xr-x2rootroot4096Dec1512:14test2
new/test2:
total8
drwxr-xr-x2rootroot4096Dec1512:14.
drwxr-xr-x3rootroot4096Dec1512:25..
请注重写法,不要写成.*了。(缘故原由请看上面)
3、成绩2
下面提到不要写成.*,那.*代表甚么?
援用
[root@dc5test]#echo.*
...
.*代表的是以后目次,和上一层目次。
以是,利用.*会招致更年夜的成绩:
援用
[root@dc5test]#cp-aold/.*new/
cp:cannotcopyadirectory,`old/..,intoitself,`new/
cp:cannotcopyadirectory,`old/..,intoitself,`new/
cp:willnotcreatehardlink`new/oldtodirectory`new/.
cp:overwrite`new/.test3?y
[root@dc5test]#ll-laRnew/
new/:
total16
drwxr-xr-x4rootroot4096Dec1511:55.
drwxr-xr-x4rootroot4096Dec1511:55..
-rw-r--r--1rootroot0Dec1512:07.test3
drwxr-xr-x2rootroot4096Dec1512:14new
-rw-r--r--1rootroot0Dec1512:05test1
drwxr-xr-x2rootroot4096Dec1512:14test2
new/new:
total8
drwxr-xr-x2rootroot4096Dec1512:14.
drwxr-xr-x4rootroot4096Dec1511:55..
-rw-r--r--1rootroot0Dec1512:07.test3
-rw-r--r--1rootroot0Dec1512:05test1
new/test2:
total8
drwxr-xr-x2rootroot4096Dec1512:14.
drwxr-xr-x4rootroot4096Dec1511:55..
也就是说,利用.*就即是如许了:
援用
[root@dc5test]#cp-aold/.old/..old/.test3new/
[root@dc5test]#echoold/.*
old/.old/..old/.test3
4、扩大实在如许的成绩,不但cp下令有如许的成绩,在一切触及含有特别字符意义文件的下令时,都必要思索,比方rm:
援用
[root@dc5new]#ll-a
total12
drwxr-xr-x3rootroot4096Dec1512:14.
drwxr-xr-x4rootroot4096Dec1511:55..
-rw-r--r--1rootroot0Dec1512:07.test3
-rw-r--r--1rootroot0Dec1512:05test1
drwxr-xr-x2rootroot4096Dec1512:14test2
[root@dc5new]#rm-rf*
[root@dc5new]#ll-a
total8
drwxr-xr-x2rootroot4096Dec1512:40.
drwxr-xr-x4rootroot4096Dec1511:55..
-rw-r--r--1rootroot0Dec1512:07.test3
准确的写法应当是:
援用
[root@dc5new]#rm-rf.**
rm:cannotremove`.or`..
rm:cannotremove`.or`..
[root@dc5new]#ll-a
total8
drwxr-xr-x2rootroot4096Dec1512:42.
drwxr-xr-x4rootroot4096Dec1511:55..
固然,这是一样的:
援用
[root@dc5new]#rm-rf*.[^.]*
[root@dc5new]#ll-a
total8
drwxr-xr-x2rootroot4096Dec1512:44.
drwxr-xr-x4rootroot4096Dec1511:55..
※良多时分,估计的和实践的了局是完整纷歧样的。bash编写剧本特别必要注重。
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们! |