Mac shell遍历文件夹 删除.svn

原创 2016年08月31日 17:36:34

为了写个遍历文件的脚本,找了好多网上的参考,终于没问题了,就总结一下。

for fileName in *; do
		
		if [[ -d $fileName ]]; then
			echo $fileName;
		elif [[ ! -e $fileName ]]; then
				echo $fileName not exist
		fi
		
	done

开始用这种方法遍历目录下的文件,后来发现*只能找到可见文件,找不到隐藏的文件,而我要处理的文件夹可能会是隐藏文件,

就又在网上找到了一种方法:

files=`ls -A`
	for fileName in $files; do
		
		if [[ -d $fileName ]]; then
			echo $fileName;
		elif [[ ! -e $fileName ]]; then
				echo $fileName not exist
		fi
		
	done
这种方法可以在/bin/bash 下用 ,/bin/zsh 下 ls -A 返回的不是数组,无法遍历,没找到原因,由于我开始默认用的是zsh,坑了我好大一会找原因,这可能就是两种shell的不同吧

虽然能遍历了,但是发现个别目录进不去,因为文件名有空格,这个通常的毛病网上确实很多相关答案,可是在我的脚本里不能很好工作,不知道是不是解决这个问题的人和我的环境不一样。我是Mac平台/bin/bash,  这个 IFS=$(echo -en "\n\b") 更改IFS的放到我的脚本里反而把我没有空格的文件名都给拆开了,找了半天找到 用 IFS=$'\n' (单引号) 解决了,下面就附上我随便写的递归删除所有目录下的 .svn脚本:

#!/bin/bash
# rm svn file

echo $1


if [[ ! -d $1 ]]; then
	echo "not dir"
	return
fi

SAVEIFS=$IFS;
IFS=$'\n'
rmDirSvn(){
	
	cd $1;
	
	countF=`ls -A | wc -l`
	if [[ $countF -eq 0 ]]; then
		cd ./../
		echo $1 is null
		return;
	fi
	countF=`find . -name ".svn" -maxdepth 1`
	if [[ -n $countF ]]; then
		rm -rf .svn
	fi
	
	
	files=`ls -A`
	for fileName in $files; do
		
		if [[ -d $fileName ]]; then
			rmDirSvn $fileName;
		elif [[ ! -e $fileName ]]; then
				echo $fileName not exist
		fi
		
	done
	
	cd ./../
}

rmDirSvn $1;
IFS=$SAVEIFS
运行的时候只需要 ./rmSvn.sh testSvn 就能删除testSvn目录下的所有.svn目录了

其实上面这么多代码和下面这几行是等价的

IFS=$'\n'
files=`find . -name ".svn"`
for f in $files;do
rm -rf $f
或者一行命令也足已搞定:
find . -name ".svn" -exec rm -rf {} \;
这条命令的好处就是不用设置IFS也能处理空格的文件
以上是我参考了许多网友的经验,再次表示感谢。


遍历删除当前文件夹中所有 .svn 的文件

find . -name .svn -exec rm -rf {} \; 遍历删除当前文件夹中所有 .svn 的文件 可用作清除项目中的svn信息...
  • xyxjn
  • xyxjn
  • 2014年03月01日 18:21
  • 2846

MAC下删除递归文件

工程出现了一个递归文件,导致项目不能复制和压缩,找到该递归文件,删除后,发现这个被删除的递归文件竟然还会导致垃圾桶不能彻底删除。 一直报错误:您不能删除项目“”,因为它的名称太长或包括的字符在目的宗...
  • kashjack
  • kashjack
  • 2017年02月13日 09:44
  • 501

用Shell脚本来遍历文件夹里的所有文件

#!/bin/bashfunction ergodic(){ for file in ` ls $1 ` do if [ -d $1"/"$f...
  • topasstem8
  • topasstem8
  • 2011年06月17日 15:00
  • 20720

遍历mac指定目录下所有Mach-O文件,找出函数符号所在的文件(库冲突用)

遍历mac指定目录下所有Mach-O文件,找出函数符号所在的文件(库冲突用)
  • wichlin
  • wichlin
  • 2016年11月25日 17:49
  • 367

Mac内的find命令

QuestionMac内的find命令和Linux的shell命令有点不相同,为乐方便以后的查找,现在此处,留着备份。Solutionfind path -name "(字符,可以用wildcard)...
  • u010416101
  • u010416101
  • 2017年02月27日 23:21
  • 541

Shell遍历文件夹删除指定后缀名的文件

之前移动硬盘不小心中了bing
  • tyxkzzf
  • tyxkzzf
  • 2014年10月24日 01:25
  • 8456

shell脚本删除N天前的文件夹-----附linux和mac上date命令的不同

背景: 每日构建的东西,按日期放到不同的文件夹里。如今天的构建放到2015-06-01里,明天的就放到2015-06-02里,依次类推。时间久了,需要一个脚本删除N天前的文件夹。(本...
  • yanzi1225627
  • yanzi1225627
  • 2015年06月02日 13:15
  • 9899

Mac下使用命令行或脚本删除文件到废纸篓

mac删除文件有两种方式: 1. 使用Finder的“移到废纸篓”功能 2. 使用rm命令 第二种方式删除的文件,不能在废纸篓中找到,也就是所谓的“彻底删除了” 但是我们在使用terminal...
  • TinyJian
  • TinyJian
  • 2017年10月10日 17:37
  • 720

mac删除带有多级目录或文件的文件夹命令

一般我们删除一个文件夹的命令是:rmdir [file path]   如:rmdir ../myfile  但是如果文件夹中含有别的文件夹或着文件之类的话使用上面的命令是会失败的。 那么我们应该...
  • wu110112
  • wu110112
  • 2017年04月24日 09:49
  • 1320

Mac删除文件&文件夹

Mac下使用终端(console)删除文件和文件夹的命令
  • JiajieZhuo
  • JiajieZhuo
  • 2017年03月24日 09:42
  • 6154
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Mac shell遍历文件夹 删除.svn
举报原因:
原因补充:

(最多只允许输入30个字)