无法更改echos文件名的for循环结果的文件名

时间:2014-10-02 05:44:27

标签: bash unix sed

我已经成功运行了一个脚本,该脚本使用

打印出特定目录中文件的名称

for f in data/* do echo $f

当我运行该程序时,它给了我:

data/data-1.txt data/data-2.txt data/data-3.txt(数据目录中的文件)

但是,当我需要将所有文件名从数据 - * .txt更改为mydata- * txt时,我无法弄明白。

我一直在尝试使用sed s/data/mydata/g $f,但它打印出整个文件,并没有正确更改名称。有人可以给我一些关于如何更改文件名的提示吗?如果我使用SED,它似乎也改变了目录的名称,所以我有点死路一条。即使使用mv似乎也没有做任何事情。

1 个答案:

答案 0 :(得分:0)

for f in data/*
 do
  NewName="$( echo "${f}" | sed 's#/data-\([0-9]*.txt\)$#mydata\1#' )"
  if [ ! "${f}" = "${NewName}" ]
   then
     mv ${f} ${NewName}
   fi 
 done

基于您的代码,但还有很多其他方法(例如:find -exec