我在输入目录中有文件。文件名如下所示
这些文件将每天更新,明天,输入将是
我需要将这些文件重命名为以下文件名:
我尝试使用下面的shell脚本,但它无效。
#!/bin/bash
ls | while read FILES
do
newfile = ${FILES/\SEMAPHOREINPUT_.*.xlsx/}
mv $newfile /home/test
done
答案 0 :(得分:0)
三个严重错误:
=
符号前后不得有空格。您的字符串替换错误。要删除文件名的日期戳部分,请使用
${FILES/_[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]/}
......或者更好,因为要删除的模式必须出现在字符串的末尾,
${FILES%_[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9].xlsx}.xlsx
还有其他问题:
解析ls
的输出比带有glob的循环更复杂,更不可靠:
for file in *; do
…
done
更好的是,明确避免意外:
for file in SEMAPHOREINPUT_[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9].xlsx
WRAPPERINPUT_[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9].xlsx; do
mv "$file" "/home/test/${file%_[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9].xlsx}.xlsx"
done
答案 1 :(得分:0)
你可以这样做
for i in `ls *.xlsx`;
do n1=`echo $i|cut -d '_' -f1`;
t=`echo $n1.xlsx`;
mv $i $t;
mv $t /home/test;
done