gpt4 book ai didi

macos - 在 Bash 中,如何去除目录中文件名中的所有数字,同时保留文件扩展名

转载 作者:行者123 更新时间:2023-11-29 09:41:21 24 4
gpt4 key购买 nike

我在这样的目录中有文件:

asdfs54345gsdf.pdf
gsdf6456wer.pdf
oirt4534724wefd.pdf

我想将所有文件重命名为数字 + .pdf,因此上述文件将重命名为:

54345.pdf
6456.pdf
4534724.pdf

最好是原生 Bash 命令或脚本 (OSX 10.6.8)

我收集到的一些线索包括

sed 's/[^0-9]*//g' input.txt 
sed 's/[^0-9]*//g' input.txt > output.txt
sed -i 's/[^0-9]*//g' input.txt
echo ${A//[0-9]/} rename 's/[0-9] //' *.pdf

最佳答案

这个灵魂会这样做:

for f in *.pdf 
do
mv "$f" "${f//[^0-9]/}.pdf"
done

但你最好先试试:

for f in *.pdf 
do
echo mv "$f" "${f//[^0-9]/}.pdf"
done

请注意,abc4.pdf 和 zzz4.pdf 都将重命名为 4.pdf。所以也许您使用 mv -i 而不仅仅是 mv。

更新:解释:

我想第一部分已经很清楚了; *.pdf 称为 globbing,匹配所有以 .pdf 结尾的文件。 for f in ... 只是迭代它们,每次都将 f 设置为其中之一。

for f in *.pdf 
do
mv "$f" "${f//[^0-9]/}.pdf"
done

我猜

mv source target 

也很清楚。如果文件名为“Unnamed File1”,则需要用引号将其屏蔽,否则 mv 将读取

mv Unnamed File1 1.pdf 

这意味着,它有多个文件要移动,Unnamed 和 File1,并且会将 1.pdf 解释为将这两个文件移动到的目录。

好吧,我想真正的问题在这里:

"${f//[^0-9]/}.pdf"

有字符外胶。让我们成为

 foo=bar

一些变量赋值 Then

 $foo
${foo}
"$foo"
"${foo}"

有四种合法的方式来引用它们。最后两个用于屏蔽空白等,所以这在某些情况下没有区别,在某些情况下是。

如果我们把东西粘在一起

 $foo4
${foo}4
"$foo"4
"${foo}"4

第一种形式将不起作用 - shell 将查找变量 foo4。所有其他 3 个表达式都引用 bar4 - 首先 $foo 被解释为 bar,然后附加 4。对于某些字符,不需要屏蔽:

 $foo/fool
${foo}/fool
"$foo"/fool
"${foo}"/fool

都将以相同的方式进行解释。因此,无论“${f//[^0-9]/}”是什么,“${f//[^0-9]/}.pdf”都会附加“.pdf”。

我们接近所有奥秘的核心:

${f//[^0-9]/}

这是一个形式的替换表达式

${variable//pattern/replacement}
  • 变量是$f(我们可以在这里省略大括号内的$)从上面说是$f。那很简单!
  • 替换为空 - 这更容易。
  • 但是 [^0-9] 真的很复杂,不是吗?

-

[0-9] 

只是从0到9的所有数字的组,其他组可以是:

[0-4] digits below 5
[02468] even digits
[a-z] lower case letters
[a-zA-Z] all (common latin) characters
[;:,/] semicolon, colon, comma, slash

第一个字符前面的 Caret ^ 是组的否定:

[^0-9] 

表示除 0 到 9 之外的所有内容(包括点、逗号、冒号...)都在组中。一起:

 ${f//[^0-9]/}

从 $f 中删除所有非数字,并且

"${f//[^0-9]/}.pdf"

附加 .pdf - 整个内容都被屏蔽了。

 ${v//p/r}

及其 friend (有很多有用的)在参数扩展一章的man bash中进行了解释。对于该小组,我手头没有可供进一步阅读的资源。

关于macos - 在 Bash 中,如何去除目录中文件名中的所有数字,同时保留文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10358766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com