重命名多个文件 - Shell脚本

时间:2015-12-09 14:07:55

标签: shell loops for-loop rename

我的文件夹中有66个文件,我想通过使用当前名称的部分重命名所有文件。

例如; 我的文件:Subscriber_ID_List_2015_11_14.csv 我想要这样 - > TheFile_20151114.csv

我尝试了下面的代码,但它没有用。我怎么能这样做?

谢谢

atexit

2 个答案:

答案 0 :(得分:0)

你可以试试这个。

#!/bin/bash
for files in `ls Subscriber_ID_List_*.csv`
do
cd /my/path/
datePrefix=`echo $files | awk -F '.' '{ print $1}'| awk -F '_' '{ print $4$5$6}'`
cp "$files" "TheFile_${datePrefix}.csv"
done

答案 1 :(得分:0)

FILES=/my/path/

这只将路径放入变量,而不是文件名。如果您要处理/my/path/中的所有文件,则可以使用FILES=/my/path/*

b=`ls "$f" |awk -F" " '{print $5}' |cut -c6-9`
c=`ls "$f" |awk -F" " '{print $5}' |cut -c11-12`
d=`ls "$f" |awk -F" " '{print $5}' |cut -c14-15`

这并未考虑$f仍然包含/my/path/,使用空格作为字段分隔符而没有明显原因,并且切换错误的字符位置。这是一种更简单的方法:

#!/bin/bash
FILES=my/path/*
for f in $FILES
do  newf=`sed 's/Subscriber_ID_List_\(....\)_\(..\)_\(..\).csv/TheFile_\1\2\3.csv/' <<<$f`
    cp "$f" "$newf"
done