重命名多个文件-Shell脚本
我的文件夹中有66个文件,我想使用它们当前名称的部分来重命名它们 比如,; 我的文件:订户\u ID\u列表\u 2015\u 11\u 14.csv 我想要这样->文件\u 20151114.csv 我尝试了下面的代码,但没有成功。我怎么能这样做 多谢各位重命名多个文件-Shell脚本,shell,loops,for-loop,rename,Shell,Loops,For Loop,Rename,我的文件夹中有66个文件,我想使用它们当前名称的部分来重命名它们 比如,; 我的文件:订户\u ID\u列表\u 2015\u 11\u 14.csv 我想要这样->文件\u 20151114.csv 我尝试了下面的代码,但没有成功。我怎么能这样做 多谢各位 #!/bin/bash FILES=/my/path/ for f in $FILES do cd /my/path/ b=`ls "$f" |awk -F" " '{print $5}' |cut -c6-9` c=`ls "$f"
#!/bin/bash
FILES=/my/path/
for f in $FILES
do
cd /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`
cp "$f" TheFile_${b}${c}${d}.csv
done
你能试试这个吗
#!/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
这只将路径放入变量,而不是文件名。如果要处理/my/path/
中的所有文件,可以使用文件=/my/path/*
这没有考虑到$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
#/bin/bash
FILES=my/path/*
对于f,在$FILES中
do newf=`sed's/Subscriber\u ID\u List\u\(....\)\ u\(..\)\ u\(..\).csv/TheFile\u1\2\3.csv/'
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`
#!/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