我的文件夹中有66个文件,我想通过使用当前名称的部分重命名所有文件。
例如; 我的文件:Subscriber_ID_List_2015_11_14.csv 我想要这样 - > TheFile_20151114.csv
我尝试了下面的代码,但它没有用。我怎么能这样做?
谢谢
atexit
答案 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