Language agnostic 如何从当前目录中的所有文件名中删除空格

Language agnostic 如何从当前目录中的所有文件名中删除空格,language-agnostic,whitespace,filenames,Language Agnostic,Whitespace,Filenames,正如标题所示,如何从当前目录中的所有文件中删除空格 范例 文件名.mp3应变为文件名.mp3 注: 我愿意接受任何语言的回答 ${i//[:space:]}删除字符串中的所有空格。使用sh ls -1 | awk '/ /{a=$0;gsub(/ /,"");b="mv \""a"\" "$0;system(b);}' for file in *' '*; do [ -f "$file" ] && mv "$file" "`echo $file|tr -d '[:space

正如标题所示,如何从当前目录中的所有文件中删除空格

范例

文件名.mp3
应变为
文件名.mp3

注:

  • 我愿意接受任何语言的回答
${i//[:space:]}
删除字符串中的所有空格。

使用sh

ls -1 | awk '/ /{a=$0;gsub(/ /,"");b="mv \""a"\" "$0;system(b);}'
for file in *' '*; do [ -f "$file" ] && mv "$file" "`echo $file|tr -d '[:space:]'`"; done
使用perl 5.14(将
y///dr
替换为
do{($x=$\u)=~ y///d;$x}
,对于旧版本)


仅当旧文件名包含空格时,才会重命名旧文件 而且新文件还不存在

for old in *; do
    new="${old//[[:space:]]}"
    [[ $old = $new || -f $new ]] || mv "$old" "$new"
done

我是python的忠实粉丝,因此这里有一个python脚本,用于执行同样的操作

import os
for f in os.listdir("."):
    r = f.replace(" ","")
    if( r != f):
        os.rename(f,r)

因为你是语言不可知论者,这里有一个ruby one liner:

ruby -e 'Dir.foreach(".") {|f| f.count(" \t") > 0 and File.rename(f, f.delete(" \t"))}'

ls-1 | awk'/{a=$0;gsub(//,“”);b=“mv\”a“\”“$0;system(b);}'/bin/sh:1:语法错误:”(“意外的/bin/sh:1:语法错误:”(“意外的/bin/sh:1:语法错误:”)意外的
抛出上述错误awk u r使用的版本是什么。如果solaris,那么您可以使用nawkI我正在使用Ubuntu12.04和mawk 1.3.3。您可以使用bash-here字符串使其更整洁:
mv“$file”$(tr-d'[:space:]“我知道,但它不适用于sh,在OP使用shAh的一条评论之后,他将bash从问题标签中删除。@glennjackman:如果是语言不可知的问题,那么这个问题更有趣。你需要引用
$I
,以防它实际上包含空格。那么为什么你的问题被标记为
bash
?它们是两个不同的问题出租shell。是的,但是大多数人都使用bash,这与bash和zhexcept都相关。你的答案在
bash
中不起作用。区别是非常相关的。有没有可能你会有两个原始文件压缩为相同的文件名?例如
文件名a.mp3
文件名a.mp3
。我不担心关于冲突,这可能是另一个问题。JVM语言解决方案如何?肯定比呼叫
mv
for old in *; do
    new="${old//[[:space:]]}"
    [[ $old = $new || -f $new ]] || mv "$old" "$new"
done
import os
for f in os.listdir("."):
    r = f.replace(" ","")
    if( r != f):
        os.rename(f,r)
ruby -e 'Dir.foreach(".") {|f| f.count(" \t") > 0 and File.rename(f, f.delete(" \t"))}'