我有一些文件说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个不同的目录。
答案 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/