Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重命名多个文件-Shell脚本_Shell_Loops_For Loop_Rename - Fatal编程技术网

重命名多个文件-Shell脚本

重命名多个文件-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"

我的文件夹中有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" |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