shell脚本如何判断目录下的多个文件夹是不是为空
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本如何判断目录下的多个文件夹是不是为空相关的知识,希望对你有一定的参考价值。
directoy=./find
$directoy
-type
d
|
xargs
du
-sh
|
grep
^0
|
awk
$2'
先在指定目录下查找
目录文件,
然后用
du
-sh
计算目录大小,
找出大小为0的目录,然后打印出来即可
若是不希望循环查找下去,可以只查找本级目录:
ls
-l
|
grep
^d
|
awk
$NF'
|
xargs
du
-sh
|
grep
^0
|
awk
$2'
还有个比较完善的解答:
directoy=./
ls
-l
$directoy
|
grep
^d
|
awk
'printf("%s/%s\n",dir,$NF)'
dir=$directoy
|
xargs
du
-sh
|
grep
^0
|
awk
$2' 参考技术A 如果想连着所有子目录下的文件一起平铺着复制过去:
find
源目录
-type
f
-exec
cp
目标目录
\;
如果仅仅是指定目录下的文件,不包含子目录下的文件:
ls
-l
源目录
|
grep
-v
^d
|
awk
$9'
|
xargs
-i
%
cp
%
目标目录
ps:find竟然不能设定搜索深度,于是本应该一个find能完成的就得去处理文本了做了。 参考技术B FILEPATH=$1
#文件目录
FILES=`ls
$FILEPATH`
cd
$FILEPATH
for
file
in
$FILES
do
[
!
-s
$file
]&&
echo
"$file
is
empty"
done
在测试编写过程序中,maxnu朋友的for
folder
in
/path/to/directory/*
的写法有问题
folder不会展开
$folder
值为/path/to/directory/*
shell判断文件是不是存在
test -e filename返回0则存在,返回1则不存在。
或者
if [ -e $filename ]
空格很关键,注意哦。
判断文件的参数如下,本人自己整理的。
-e 文件存在
-f file 是一个 regular 文件(不是目录或者设备文件)
-s 文件长度不为 0
-d 文件是个目录
-b 文件是个块设备(软盘,cdrom 等等)
-c 文件是个字符设备(键盘,modem,声卡等等)
-p 文件是个管道
-h 文件是个符号链接
-L 文件是个符号链接
-S 文件是个 socket
-t 关联到一个终端设备的文件描述符 这个选项一般都用来检测是否在一个给定脚本中的 stdin[-t0]或[-t1]是一个终端
-r 文件具有读权限(对于用户运行这个 test)
-w 文件具有写权限(对于用户运行这个 test)
-x 文件具有执行权限(对于用户运行这个 test) 参考技术A 你用命令
man [
看看帮助就知道了
[ -f filename] && echo "ok" || echo "ko"
以上是关于shell脚本如何判断目录下的多个文件夹是不是为空的主要内容,如果未能解决你的问题,请参考以下文章