更改Linux `cp`命令以复制文件组

分享于 

4分钟阅读

ubuntu

  繁體

问题:

我想复制一个组文件,但不想逐个输入名称


$ ls gmail-meta3*


gmail-meta3 gmail-meta3-REC-1558392194-26467821


gmail-meta3-LAB-1558392194-26467821 gmail-meta3-YAD-1558392194-26467821



如何像旧的DOS命令copy gmail-meta3* *.bak之类的东西?

我不想键入:


cp gmail-meta3-LAB-1558392194-26467821 gmail-meta3-LAB-1558392194-26467821.bak




答案1:

可以在bash中使用for循环。


for f in gmail-meta3* ; do


 mv"$f""$f.bak"


done



你也可以使用。


rename 's@$@.bak@' gmail-meta3*



$匹配字符串的结尾,因此该命令将.bak放在文件名的末尾。


答案2:

最接近于DOS范例的是mcp (从mmv软件包):


mcp 'gmail-meta3*' 'gmail-meta3#1.bak'



如果zsh可用,它提供的zmv模块可能更接近:


autoload -U zmv



zmv -C '(gmail-meta3*)' '$1.bak'




printf '%s' gmail-meta3* | while IFS= read -r -d '' f; do cp -a --"$f""$f.bak"; done



或者


printf '%s' gmail-meta3* | xargs -0 -I{} cp -a -- {} {}.bak




答案3

更好的答案可以用C语言写,


cps () {


 # cps"Copy Splat", copy group of files to backup, ie"cps Filename .bak"


 # copies Filename1 to Filename1.bak, Filename2 to Filename2.bak, etc.


 ls"$1"* | while read varname; do cp -a"$varname""$varname$2"; done


}



以问题为例说明问题的工作原理:


$ ls gmail-meta3*


gmail-meta3 gmail-meta3-REC-1558392194-26467821


gmail-meta3-LAB-1558392194-26467821 gmail-meta3-YAD-1558392194-26467821



$ cps gmail-meta3 .bak



$ ls gmail-meta3*


gmail-meta3 gmail-meta3-REC-1558392194-26467821


gmail-meta3.bak gmail-meta3-REC-1558392194-26467821.bak


gmail-meta3-LAB-1558392194-26467821 gmail-meta3-YAD-1558392194-26467821


gmail-meta3-LAB-1558392194-26467821.bak gmail-meta3-YAD-1558392194-26467821.bak



注意:这使用-a标志和cp命令保存文件的时间戳,并为你提供更好的备份,例如:


rick@alien:~/gmail$ cps Backup .bak


───────────────────────────────────────────────────────────────────────────────────────────


rick@alien:~/gmail$ ll Backup*


-rw-rw-r-- 1 rick rick 87302 Jun 25 05:25 BackupDays


-rw-rw-r-- 1 rick rick 87302 Jun 25 05:25 BackupDays.bak


-rw-rw-r-- 1 rick rick 153 Jun 25 05:44 BackupSets


-rw-rw-r-- 1 rick rick 153 Jun 25 05:44 BackupSets.bak


───────────────────────────────────────────────────────────────────────────────────────────


rick@alien:~/gmail$ 



注意文件副本的日期和时间与原件完全相同。



COM  文件  COMM  files  Comma  cop  
相关文章