以下是我在所有文件上递归运行dos2unix的方法:
find -exec dos2unix {} \;
我需要更改什么才能跳过.svn /目录下的文件?
答案 0 :(得分:22)
实际测试的解决方案:
$ find . -type f \! -path \*/\.svn/\* -exec dos2unix {} \;
答案 1 :(得分:2)
这是一个通用脚本,您可以根据需要更改最后一行。 我从我的findrepo脚本中采用了这种技术:
repodirs=".git .svn CVS .hg .bzr _darcs"
for dir in $repodirs; do
repo_ign="$repo_ign${repo_ign+" -o "}-name $dir"
done
find \( -type d -a \( $repo_ign \) \) -prune -o \
\( -type f -print0 \) |
xargs -r0 \
dos2unix
答案 2 :(得分:1)
只是提供一个额外的提示:如果过滤程序接受多个参数,则通过xargs而不是使用find的-exec选项来管理结果将提高执行大型目录结构时的性能,因为这将减少fork()的数量是的,所以:
find< opts> | xargs dos2unix
有一点需要注意:如果任何文件名包含空格,那么通过xargs管道将会非常失败。
答案 3 :(得分:-1)
在bash中
for fic in **/*; dos2unix $fic
甚至在zsh中更好
for fic in **/*(.); dos2unix $fic
答案 4 :(得分:-1)
find . -path ./.svn -prune -o -print0 | xargs -0 -i echo dos2unix "{}" "{}"
如果你有bash 4.0
shopt -s globstar
shopt -s dotglob
for file in /path/**
do
case "$file" in
*/.svn* )continue;;
esac
echo dos2unix $file $file
done