Bash 如何在除.svn目录下的文件以外的所有文件上递归运行命令
以下是我如何在所有文件上递归运行dos2unix:Bash 如何在除.svn目录下的文件以外的所有文件上递归运行命令,bash,unix,shell,find,Bash,Unix,Shell,Find,以下是我如何在所有文件上递归运行dos2unix: find -exec dos2unix {} \; 我需要做哪些更改才能使其跳过.svn/目录下的文件?在bash中 for fic in **/*; dos2unix $fic 在zsh中甚至更好 for fic in **/*(.); dos2unix $fic 仅提供一个附加提示:如果筛选程序接受多个参数,则通过xargs管道传递结果而不是使用find的-exec选项将提高在处理大型目录结构时的性能,因为这将减少fork()的数量,
find -exec dos2unix {} \;
我需要做哪些更改才能使其跳过.svn/目录下的文件?在bash中
for fic in **/*; dos2unix $fic
在zsh中甚至更好
for fic in **/*(.); dos2unix $fic
仅提供一个附加提示:如果筛选程序接受多个参数,则通过xargs管道传递结果而不是使用find的-exec选项将提高在处理大型目录结构时的性能,因为这将减少fork()的数量,因此: 查找| xargs dos2unix 有一个警告:如果任何文件名包含空格,通过xargs的管道传输将非常失败
find . -path ./.svn -prune -o -print0 | xargs -0 -i echo dos2unix "{}" "{}"
如果你有bash4.0
shopt -s globstar
shopt -s dotglob
for file in /path/**
do
case "$file" in
*/.svn* )continue;;
esac
echo dos2unix $file $file
done
实际测试溶液:
$ find . -type f \! -path \*/\.svn/\* -exec dos2unix {} \;
这是一个通用脚本,您可以根据需要更改最后一行。 我从我的剧本中汲取了技巧:
如何跳过
.svn/
目录?如果禁用dotglob,它将跳过隐藏文件。但是其他隐藏的文件也会被跳过,我想这不是OP想要的。噢,对不起!对于{,.}(N)中的根;执行[$root=.svn]&&continue;对于fic,单位为$root/***(.);不要做任何事;完成;工作,但查找版本现在更好…+1。谢谢对我有用。我不必担心svn文件<代码>用于*.pl中的plfile;dos2unix$plfile;完成;对于**/*.pl中的plfile;dos2unix$plfile;完成代码>将-path./.svn更改为-path'*/.svn'应该可以解决此问题。-i
已被弃用,请改用-i{}
。还有,为什么两个“{}”
?查找-print0 | xargs-0…
处理带有空格的文件名。
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