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

时间:2013-10-28 18:12:26

标签: regex linux bash shell batch-file

你好,我不能很好地使用正常的表达式,这是我在互联网上搜索的一整天。 我有一个包含许多图片的文件夹:

  • 50912000 Bicchiere.jpg
  • 50913714 Sottobottiglia Bernini.jpg

我正在使用Mac OS X,但我也可以尝试使用Ubuntu,我想为bash制作一个脚本,以便在第一个空格后删除所有字符,以获得这样的解决方案:

  • 50912000.jpg
  • 50913714.jpg

对于文件夹中的所有文件。 任何帮助表示赞赏。 此致

4 个答案:

答案 0 :(得分:4)

使用纯BASH:

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

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

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

答案 1 :(得分:2)

使用sed,

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

注意.*

之前的空格

答案 2 :(得分: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

答案 3 :(得分:0)

rename

rename 's/.*\s+//' *files