复制连续文件

复制连续文件

我有 12 个名为 、 等的文件dmp_000dmp_001一直到dmp_011.我想将它们全部复制到rdmp_000rdmp_001、 等,按顺序使编号文件一致。必须有一种简单的方法来做到这一点,而不是单独进行?

答案1

我使用这个命令生成一些示例数据

% for  i in `seq 0 11`;do touch dmp_$(printf "%03d" $i);done

% ls
dmp_000  dmp_001  dmp_002  dmp_003  dmp_004  dmp_005  dmp_006  dmp_007  dmp_008  dmp_009  dmp_010  dmp_011

要复制文件并保留原始文件修改/创建日期:

% for i in dmp*;do cp -p "$i" "r${i}";done

% ls
dmp_000  dmp_002  dmp_004  dmp_006  dmp_008  dmp_010  rdmp_000  rdmp_002  rdmp_004  rdmp_006  rdmp_008  rdmp_010
dmp_001  dmp_003  dmp_005  dmp_007  dmp_009  dmp_011  rdmp_001  rdmp_003  rdmp_005  rdmp_007  rdmp_009  rdmp_011

将文件 wdmp* 移动到 rdmp*

% for i in wdmp*;do newname=$(echo $i|sed 's/^w/r/'); mv "$i" "$newname";done

笔记: 你也可以用@warl0ck 的回答为此,请使用该rename命令。

答案2

如果 的使用zsh是可以接受的,那么:

autoload -U zmv            # load zmv
zmv -C 'dmp_(*)' 'rdmp_$1' # rename files

或者简单地在这种情况下:

zmv -C 'dmp_*' 'r$f'

$1$2扩展到相应的(...)组和$f整个文件路径)。

这个链接了解更多示例。

答案3

Posix 兼容,简短,如果您想扩展它,您的所有文件都可以作为位置参数 1-12 引用(在括号内)。

% ( set -- wdmp0[0-1][0-9] ;\
> for f ; do cp $f r${f#?} ; done )

答案4

尝试重命名命令,并且只重命名那些以dmp_,

rename dmp rdmp dmp_*

要保留文件,请尝试像这样的替代方法,

for x in dmp_*; do cp $x r$x; done

相关内容