如何删除文件和文件夹名称中的前导空格?

如何删除文件和文件夹名称中的前导空格?

如何从文件和文件夹名称中删除前导空格?(我正在运行 OS X 10.6 Snow Leopard。)

按照@Lri 下面提供的方法,我可以使用以下命令删除尾随空格:

#!/bin/bash

IFS=$'\n'
for d in {1..9}; do
    find ~/Desktop -name '* ' -depth $d | while read f; do
        mv "$f" "$(sed 's/ *$//' <<< "$f")"
    done
done

现在我尝试用这个删除前导空格:

#!/bin/bash

IFS=$'\n'
for d in {1..9}; do
    find ~/Desktop -name '* ' -depth $d | while read f; do
        mv "$f" "$(sed 's/^ *//;s/ *$//' <<< "$f")"
    done
done

但它不起作用。

我究竟做错了什么?

答案1

我发现两个问题:首先,您需要命令find来查找开头而不是结尾有空格的名称(-name ' *'而不是-name '* ')。其次,f 将是文件的完整路径,而不仅仅是其名称;这意味着空格不在字符串的开头,而是在最后一个斜杠之后(例如“/Users/timoto/Desktop/spacedfile”)。这处理起来有点复杂;我想到最简单的方法是使用dirname和来分割路径basename,然后从基部删除前导空格。

此外,没有必要在不同的深度运行该命令 9 次;只需使用选项-depth(不带数字),它将按深度优先的顺序返回结果(即,最深的文件在其包含的目录之前),这应该可以防止因处理其中的文件而导致目录重命名的问题。

IFS=$'\n'
find ~/Desktop -name ' *' -depth | while read f; do
    mv "$f" "$(dirname "$f")/$(basename "$f" | sed 's/^ *//;s/ *$//')"
done

编辑:我的 basename/sed 命令比它需要的更复杂;简化它......

相关内容