比如要把/home/usera拷贝到/mnt/temp,首先想到的就是
cp -R /home/usera/* /mnt/temp
但是这样有一个问题,/home/usera下的隐藏文件都不会被拷贝,子目录下的隐藏文件倒是会的。
那如何才是正确的方法呢?有人说用-a选项,有人说用find加管道。
其实没这么复杂,Google了之后,学了一招。原来只有用“.”当前目录代替“*”就好了。
cp -R /home/usera/. /mnt/temp
for file in/home/alex/Pictures/DCIM/2*/*.jpg do #截取图片的文件名 如: "xxoo.jpg" i=$(echo ${file}|awk -F'/' '{print $NF}') #判断目标目录中是否存在相同的文件 if ls /home/alex/extpic | grep -q -w ${i} then #若存在,mv 将存在的文件改名,改名后将源目录中的文件复制过去 mv /home/alex/extpic/${i} /home/alex/extpic/bak_${i} cp ${file} /home/alex/extpic fi #不存在相同的文件 就直接copy cp ${file} /home/alex/extpic done #===================================================================== #至于第二个cp,要不要放在if内(如下);放或者不放,------都行,看个人习惯 if '存在' then mv ... ... #存在则改名 cp ... ... #改名后复制文件 else cp ... ... #不存在 则 直接复制 fcp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。
语法
cp (选项) (参数)
选项
参数
源文件:制定源文件列表。默认情况下,cp命令不能复制目录,如果要复制目录,则必须使用-R选项;
目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。
实例
如果把一个文件复制到一个目标文件中,而目标文件已经存在,那么,该目标文件的内容将被破坏。此命令中所有参数既可以是绝对路径名,也可以是相对路径名。通常会用到点.或点点..的形式。
例如,下面的命令将指定文件复制到当前目录下:
cp ./test1/test.txt ./
所有目标文件指定的目录必须是己经存在的,cp命令不能创建目录。如果没有文件复制的权限,则系统会显示出错信息。
将文件 test1.txt 复制到目录./下,并改名为test2.txt
cp test1.txt ./test2.txt
将目录/usr/men下的所有文件及其子目录复制到目录/usr/zh中
cp -r /usr/men /usr/zh
交互式地将目录/usr/men中的以m打头的所有.c文件复制到目录/usr/zh中
cp -i /usr/men m*.c /usr/zh
我们在Linux下使用cp命令复制文件时候,有时候会需要覆盖一些同名文件,覆盖文件的时候都会有提示:需要不停的按Y来确定执行覆盖。文件数量不多还好,但是要是几百个估计按Y都要吐血了,可用下一个方法:
cp -f /usr/men m*.c /usr/zh
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)