尝试使用标准工具重命名批量文件夹

尝试使用标准工具重命名批量文件夹

我正在尝试批量重命名许多文件夹,但由于某种原因我的方法似乎不起作用。我正在尝试使用以下脚本,但它什么也没做。我是编程新手,所以任何建议都会受到赞赏。这些是我的文件夹名称。

test.custom.tmp         untitledfolder.custom.tmp   wis.custom.tmp

我需要将它们重命名为

test untitledfolder wis

我正在使用以下脚本,但它什么也没做。

while read line; do
  newname=$(echo "$line" | cut -f 1 -d '_')
  mv $line newname;
done < read

在这里,我创建了一个名为 read 的文件,其中包含所有需要重命名的文件夹名称。

这个脚本有什么问题,还有更好的方法来完成这个任务吗?谢谢。

答案1

一个简单的方法是:

$ for d in *.custom.tmp/; do 
    echo mv -- "$d" "${d%%.*}"
  done
mv -- test.custom.tmp/ test
mv -- untitledfolder.custom.tmp/ untitledfolder
mv -- wis.custom.tmp/ wis

一旦确定这是您想要的结果,请删除echo.


${d%%.*}是一个参数扩展,准确地说:

${参数%字}

${参数%%字}

该单词被扩展以产生模式并根据下面描述的规则进行匹配(请参阅模式匹配)。如果模式与参数扩展值的尾部部分匹配,则扩展的结果是具有最短匹配模式(“%”情况)或最长匹配模式(“%%”情况)的参数值已删除。

在本例中,它以字符串为例test.custom.tmp,并删除第一个之后的所有内容.

答案2

如果你想保持你的方法,你可以这样做:

while read line; do
  newname=$(echo "$line" | cut -f 1 -d '.');
  mv $line $newname;
done < read

请记住,您的分隔符是一个点 ( -d '.'),并且也将 用作$newname变量,而不是字符串。

这可以纠正您的脚本错误,但为了更好的方法,您可以使用@schrodingerscatcuriosity 答案

相关内容