删除文件名中的空格、连字符和下划线?

whi*_*ngs 10 shell-script rename files

从目录中的所有文件或选定文件中删除空格、连字符和下划线的好命令是什么?

我在 Thunar 自定义操作中使用以下命令来对文件名进行 slugify:

for file in %N; do mv "$file" "$(echo "$file" | tr -s ' ' | tr ' A-Z' '-a-z' | tr -s '-' | tr -c '[:alnum:][:cntrl:].' '-')"; done
Run Code Online (Sandbox Code Playgroud)

但该命令仅用破折号/连字符和小写字母替换空格。

我在终端中使用以下命令从文件夹中的数千个文件名中删除空格,并且运行速度非常快:

 rename "s/ //g" *
Run Code Online (Sandbox Code Playgroud)

同样,它只删除空格,不删除连字符/破折号和下划线。

理想情况下,我的文件名中不需要任何空格、连字符/破折号和下划线。如果该命令可以与所选文件的 Thunar 自定义操作一起使用,那就太好了。

Joh*_*024 11

软件包rename附带的版本perl支持正则表达式:

rename "s/[-_ ]//g" *
Run Code Online (Sandbox Code Playgroud)

或者,

rename -i "s/[-_ ]//g" *
Run Code Online (Sandbox Code Playgroud)

-i标志将rename使用交互模式,提示目标是否已存在,而不是静默覆盖。

Perl 的重命名有时称为prename.

Perl 的重命名与 util-linux 的重命名

在类似 Debian 的系统上,perl 的重命名似乎是默认的,上面的命令应该可以正常工作。

在某些发行版中,renameutil-linux 中的实用程序是默认的。此实用程序与 Perl 的rename.

  • 全部:首先,检查 Perl 的rename名称是否可用prename

  • Debian: Perl 的重命名应该是默认的。它也可以作为prename. 该rename可执行文件,不过,是的控制之下/etc/alternatives,因此可以被改变为不同的东西。

  • archlinux:运行pacman -S perl-rename,命令可以作为perl-rename. 要获得更方便的名称,请创建别名。(帽子提示:ChiseledAbs)

  • Mac OSX根据此答案rename可以通过以下方式使用自制软件安装在 OSX 上:

    brew install rename 
    
    Run Code Online (Sandbox Code Playgroud)
  • 直接下载: rename也可以从 Perl Monks 获得:

     wget 'http://www.perlmonks.org/?displaytype=displaycode;node_id=303814' -O rename
    
    Run Code Online (Sandbox Code Playgroud)


Cri*_*itu 6

我会用替换tr命令替换所有这些命令sed,例如:

for file in %N; do 
    mv "$file" "$(echo "$file" | sed 's/[ _-]//g')"
done
Run Code Online (Sandbox Code Playgroud)