我试图批量重命名许多文件夹,但由于某种原因,我的方法似乎不起作用。我试图使用以下脚本,但它什么也不做。我对编程很陌生,所以任何建议都很感激。这些是我有的文件夹名。
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的文件,其中包含了需要重命名的所有文件夹名。
这个脚本有什么问题,还有一个更好的方法来完成这个任务吗?谢谢。
发布于 2022-05-31 15:34:04
一个简单的方法是:
$ 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%%.*}
是一个参数展开,确切地说:
${参数% word }${参数%%word}该单词被展开以生成模式并根据下面描述的规则进行匹配(请参见模式匹配)。如果模式匹配参数扩展值的尾随部分,则展开的结果是删除了最短匹配模式(‘%’大小写)或最长匹配模式(‘%%’大小写)的参数值。
在本例中,它接受字符串(例如test.custom.tmp
),并在第一个.
之后删除每个字节。
发布于 2022-05-31 15:40:29
如果你想保留你的秘密,你可以这样做:
while read line; do
newname=$(echo "$line" | cut -f 1 -d '.');
mv $line $newname;
done < read
请记住,您的分隔符是一个点(-d '.'
),并且还使用$newname
作为变量,而不是字符串。
这将纠正您的脚本错误,但是为了获得更好的方法,您可以使用@schrodingerscat好奇心好奇答案。
https://unix.stackexchange.com/questions/704495
复制相似问题