![如何删除文件和文件夹名称中的前导空格?](https://linux22.com/image/1309304/%E5%A6%82%E4%BD%95%E5%88%A0%E9%99%A4%E6%96%87%E4%BB%B6%E5%92%8C%E6%96%87%E4%BB%B6%E5%A4%B9%E5%90%8D%E7%A7%B0%E4%B8%AD%E7%9A%84%E5%89%8D%E5%AF%BC%E7%A9%BA%E6%A0%BC%EF%BC%9F.png)
如何从文件和文件夹名称中删除前导空格?(我正在运行 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 命令比它需要的更复杂;简化它......