我已经成功运行了一个脚本,该脚本使用
打印出特定目录中文件的名称 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
似乎也没有做任何事情。
答案 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
)