如何在Linux中重命名文件夹中所有文件,删除空格字符后的所有内容?

4

你好,我无法熟练使用正则表达式,一整天都在网上搜索。我有一个包含许多图片的文件夹:

  • 50912000 Bicchiere.jpg
  • 50913714 Sottobottiglia Bernini.jpg

我使用的是Mac OS X操作系统,但我也可以尝试Ubuntu。我想编写一个bash脚本,以删除第一个空格后的所有字符,得到以下解决方案:

  • 50912000.jpg
  • 50913714.jpg

适用于文件夹中的所有文件。 非常感谢您的帮助!

4个回答

6

使用纯Bash:

f='50912000 Bicchiere.jpg'
mv "$f" "${f/ *./.}"

或者使用find一次性修复所有文件:

find . -type f -name "* *" -exec bash -c 'f="$1"; s="${f/_ / }"; mv -- "$f" "${s/ *./.}"' _ '{}' \;

你想把文件名中的所有下划线都替换为空格吗? - anubhava
是的,查找 *_.jpg 并将其更改为 *.jpg,因为某些文件在空格之前有 _。 - Elio Ermini
那么如果我只是在空格前面去掉下划线,就可以了吗? - anubhava
@anubhava无法工作,显示如下内容:mv:将./99900054 ESPOSITORE ORANGE SPOT.jpg重命名为s{f/ *./.}:没有这样的文件或目录。 - Elio Ermini
请现在检查编辑后的查找命令。@gniourf_gniourf:非常感谢,我使用了您的建议。 - anubhava
显示剩余8条评论

2

使用sed命令,

sed 's/ .*\./\./g'

请注意在.*之前的空格。

0

你可以使用find和一个小脚本的组合。

prompt> find . -name "* *" -exec move_it {} \;
mv "./50912000 Bicchiere.jpg" ./50912000
mv "./50913714 Sottobottiglia Bernini.jpg" ./50913714
prompt> cat move_it
#!/bin/sh

dst=`echo $1 | cut -c 1-10`

# remove the echo in the line below to actually rename the file

echo mv '"'$1'"' $dst

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接