删除文件或文件夹名称中的前导或尾随空格

old*_*oxx 8 bash files directory rename

我想出了一个巧妙的方法来摆脱重复的文件。您知道,名称中包含“(1).”、“(2).”、“(3).”等的那些。在终端窗口的命令行中,您输入“rm "[反斜杠]") ",但不带引号。这样就可以了。[反斜杠]“\”表示下一个字符被接受为一个字符,而不是一对括号的一部分。当没有其他方法时,这会起作用。顺便说一句,我试图在“rm”命令中键入“\”,但它无法正确显示,因此我将术语 [反斜杠] 放在那里。

文件夹或文件名中出现“\”也表明存在空格。在名称中使用空格并不常见,除非您使用 Windows。Windows 只是让您用双引号将“整个路径\文件名”括起来。您也可以在 Ubuntu 中执行此操作,或者在空格前添加反斜杠“\”。但是如果你想用不同的字符替换空格呢?像连字符或下划线?您将如何一次对所有文件夹和文件执行此操作?

或者,如果您决定只删除空格,将其余的字符打包在一起呢?你会怎么做?

这是一个棘手的问题:摆脱或任何前导或尾随空格。即使有不止一个在场。

总结一下,如何检测和删除完全空的文件。或者是空的文件夹。

hee*_*ayl 19

阅读man renameman find获得更多想法。


gle*_*man 5

我经常忘记rename。以下是使用普通 bash 执行此操作的方法:

$ touch "     leading spaces" "trailing spaces     "

$ printf ">%s<\n" *spaces*
>     leading spaces<
>trailing spaces     <

$ shopt -s extglob  
$ for f in *spaces*; do 
    new=${f##*([[:blank:]])}        # remove leading whitespace
    new=${new%%*([[:blank:]])}      # remove trailing whitespace
    mv "$f" "$new"
done

$ printf ">%s<\n" *spaces*
>leading spaces<
>trailing spaces<
Run Code Online (Sandbox Code Playgroud)