如何递归删除所有文件的结尾空格?
时间: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:现在它替换了行尾的所有空格(这也意味着制表符)