更改文件名并复制到不同的目录

时间:2016-05-11 12:05:59

标签: linux string

我有一些文件说1000个数字..想要以这样的方式重命名这些文件,想要从文件名中删除少量字符并将其复制到其他目录。

例如:原始文件名。

vfcon062562~19.xml
vfcon058794~29.xml
vfcon072009~3.xml
vfcon071992~10.xml
vfcon071986~2.xml
vfcon071339~4.xml
vfcon069979~43.xml

所需的O / P正在削减〜和后面的字符。 O / P Ex:

vfcon058794.xml
vfcon062562.xml
vfcon069979.xml
vfcon071339.xml
vfcon071986.xml
vfcon071992.xml
vfcon072009.xml

但是想要放置n个不同的目录。

2 个答案:

答案 0 :(得分:0)

如果您使用的是bash或类似的,可以使用以下简单循环:

for input in vfcon*xml
do
  mv $input targetDir/$(echo $input | awk -F~ '{print $1".xml"}')
done

或者在一行中:

for input in vfcon*xml; do mv $input targetDir/$(echo $input | awk -F~ '{print $1".xml"}'); done

这使用awk之前将所有内容分开〜将其用作字段分隔符并打印第一列并附加“.xml”以创建输出文件名。所有这些都以targetDir为前缀,可以是完整路径。

如果您使用的是csh / tcsh,那么循环的语法会略有不同,但命令会相同。

答案 1 :(得分:0)

我想在更改任何内容之前确保我的数据集是正确的,所以我先将其放入变量中,然后检查它。

files=$(ls vfcon*xml) echo $files | less

然后,就像@Stefan说的那样,使用一个循环:

for i in $files do mv "$i" "$( echo "$file" | sed 's/~[0-9].//g')" done

如果您需要有关bash的帮助,可以使用http://www.shellcheck.net/