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也能处理空格的文件
以上是我参考了许多网友的经验,再次表示感谢。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

mac osx终端批量删除文件

sudo su cd / find / -name "*google-music*" -exec rm -rf "{}" \;  ...

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

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

Linux / Mac 下 基本的 bash shell 命令详解(touch 、cp、mv、rm)

前言这一篇主要说了touch,cp,mv,rm这几个很基本常用的命令。博客会同时发布在简书和CSDN,希望大家支持。处理文件bash shell 提供了很多在Linux文件系统上操作文件的命令。创建文...

Mac 批量删除 .svn 文件

MAC系统下,.svn文件是隐藏的。 如果项目是非export导出的,那么项目中会有很多的.svn文件。 如果项目的体积非常庞大,我们如何快速的批量删除.svn文件呢?下面是操作方法: ...

Linux下 利用find命令删除所有.svn目录

====================实例==============     删除所有.svn目录 这也是我当初查找 Linux find 命令的目的。 1)  fi...

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

之前移动硬盘不小心中了bing

利用shell脚本遍历文件夹内所有的文件并作整理统计

环境: Ubuntu下采用shell脚本实现 案例简述: 文件夹内有许多子文件夹,这里需要自动读取所有的文件,包括他们的地址和文件名。通过观察文件名的规律,按照一定的规则裁剪出文件名的某一部分,该部...
  • cfyzcc
  • cfyzcc
  • 2016-07-25 21:49
  • 4932

VBS脚本,中间用到了遍历文件夹,正则匹配。使用了 WScript.Shell 对象的几个方法。

这个脚本只满足了我要完成的工作的一部分内容,其余内容必须在公司才能完成及调试了。 脚本运行需要有如下条件: 与脚本在同一级目录下的 ctags.exe ,需要5.8以后版本的。主要是要支持...

Windows下使用标准Shell接口遍历文件和文件夹(1)

在Windows中我们经常需要遍历一个文件夹或者遍历一个磁盘。本文介绍如何使用标准的Shell接口进行遍历。在介绍过程中会逐步的实现一个类似FileZilla的TreeView+ListView的界面...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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