如何递归删除所有文件的结尾空格?

时间:2020-03-06 14:52:43  来源:igfitidea点击:

如何删除整个项目的所有尾随空白?从根目录开始,并从所有文件夹中的所有文件中删除尾随空格。

另外,我希望能够直接修改文件,而不仅仅是将所有内容打印到stdout。

解决方案

在Bash中:

find dir -type f -exec sed -i's / * $ //''{}'';'

注意:如果我们使用的是.git仓库,请尝试添加:-not -iwholename'.git'

使用:

find . -type f -print0 | xargs -0 perl -pi.bak -e 's/ +$//'

如果我们不希望生成" .bak"文件:

find . -type f -print0 | xargs -0 perl -pi -e 's/ +$//'

作为zsh用户,我们可以省略查找呼叫,而是使用:

perl -pi -e 's/ +$//' **/*

注意:为了防止破坏.git目录,请尝试添加:-not -iwholename'* .git *'

这对我不使用GNU sed或者xargs的OSX 10.5 Leopard有用。

find dir -type f -print0 | xargs -0 sed -i.bak -E "s/[[:space:]]*$//"

如果我们有需要排除的文件(我确实有),请小心这一点!

我们可以使用-prune忽略某些目录或者文件。对于git存储库中的Python文件,我们可以使用类似以下内容的代码:

find dir -not -path '.git' -iname '*.py'

我最终没有使用查找,也没有创建备份文件。

sed -i '' 's/[[:space:]]*$//g' **/*.*

根据文件树的深度,此文件(较短的版本)可能足以满足需求。

注意,例如,这也需要二进制文件。

我最终运行了它,这是pojo和adams版本之间的混合。

它将清除尾随空格,以及尾随空格的另一种形式,即回车符:

find . -not \( -name .svn -prune -o -name .git -prune \) -type f \
  -exec sed -i 's/[:space:]+$//' \{} \;  \
  -exec sed -i 's/\r\n$/\n/' \{} \;

如果有的话,它不会碰到.git文件夹。

编辑:注释后使其更加安全,不允许使用其中带有" .git"或者" .svn"的文件。但是请注意,如果有的话,它将接触二进制文件。如果我们只想让它触摸例如-f,则在-type f之后使用-iname" * .py"-或者-iname" * .php"。 .py和.php文件。

更新2:现在它替换了行尾的所有空格(这也意味着制表符)