以下是我如何递归地在所有文件上运行dos2unix的方法:
find -exec dos2unix {} \;
我需要改变什么以使其跳过 .svn/ 目录下的文件?
实际测试的解决方案:
$ find . -type f \! -path \*/\.svn/\* -exec dos2unix {} \;
这是一个通用脚本,您可以根据需要更改最后一行。我从我的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
find <opts> | xargs dos2unix
一个警告:如果任何文件名包含空格,则通过 xargs 进行管道传输会失败。
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
-i
已被弃用,请使用-I{}
。另外,为什么要两个“{}”? - Dennis Williamson在Bash中
for fic in **/*; dos2unix $fic
甚至在zsh中更好
for fic in **/*(.); dos2unix $fic
.svn/
目录的? - Nathan Fellmanfor plfile in *.pl; do dos2unix $plfile; done; for plfile in **/*.pl; do dos2unix $plfile; done;
- RuntimeException
find ... -print0 | xargs -0 ...
处理带有空格的文件名。 - Dennis Williamson