批量文件在bash中重命名,用空格删除名称,留下尾随数字

时间:2015-12-26 06:27:49

标签: regex bash shell

bash / shell专家可以帮助我吗?每次我使用PDF将大型pdf文件(例如其名称为X.pdf)拆分为单独的页面,其中每个页面都是一个pdf文件,它会创建具有此模式的文件

"X 1.pdf"
"X 2.pdf"
"X 3.pdf"  etc...

文件名" X"以上是原始文件名,可以是任何内容。然后在名称后添加一个空格,然后添加页码。页码始终从1开始,最多到页数。 adobe PDF中没有选项可以更改此内容。

我需要运行一个shell命令来简单地删除/删除所有" X"部分,只留下数字,就像这样

1.pdf
2.pdf
3.pdf 
....
100.pdf  ...etc..

模式匹配不好,不确定我需要的正则表达式。

我知道我需要像

这样的东西
for i in *.pdf; do mv "$i$"  ........;  done

这是.......部分,我不知道该怎么做。

这只需要在Linux / Unix系统上运行。

3 个答案:

答案 0 :(得分:4)

使用sed ..

for i in *.pdf; do mv "$i" $(sed 's/.*[[:blank:]]//' <<< "$i");  done

通过rename

可以很简单
rename 's/.*\s//' *.pdf

答案 1 :(得分:4)

您可以remove所有内容(包括)变量中的最后一个空格:

${i##* }

那个&#34;星空&#34;在双重哈希之后,意思是&#34;任何后跟空格&#34;。 ${i#* }会删除第一个空格。

所以运行此检查:

for i in *.pdf; do echo mv -i -- "$i" "${i##* }" ; done

如果看起来不错,请移除echoGordon Davisson建议的-i会在覆盖之前提示您,--表示选项结束,如果您的文件名以-开头,则会阻止事件爆发。< / p>

答案 2 :(得分:2)

如果您只想对文件(或目录)进行批量重命名,并且不介意使用外部工具,那么这是我的:rnm

执行所需操作的命令是:

rnm -rs '/.*\s//' *.pdf

.*\s选择最后一个空格之前(和)的部分,并用空字符串替换它。

注意:

  1. 它不会覆盖任何现有文件(如果找到具有目标名称的现有文件则抛出警告)。

  2. 此操作是安全的。您可以使用rnm取回上一个rnm -u命令所做的更改。

  3. Here's a list of documents for rnm