如何解决循环浏览Bash中的目录
| 我要求脚本将“ 0”放到目录中,然后删除子目录中的除少数几个文件以外的所有文件,但不要理会这些文件夹。我需要保留的每个文件都使用switch
/case
会有所帮助吗?
理想情况下,我认为它应该继续搜索其他子目录,而不是让我拥有仅向下搜索两个级别的嵌套循环。
另一个问题是,它会跳过带空格的文件夹(尽管暂时来说,脚本将要运行的卷并不存在问题)。
这是我的代码:
for i in /Users/YourName/Desktop/Test/* ; do
if [ -d \"$i\" ]; then
cd $i
for j in \"$i\"/* ; do
if [ -d \"$j\" ]; then
cd $j
for k in $(ls *); do
if [ ! $k == \"watch.log\" ]; then
echo $k
rm -rf $k
fi
done
fi
done
fi
done
解决方法
这个怎么样?
$ find /Users/YourName/Desktop/Test -type f -maxdepth 2 -not -name watch.log -delete
说明
-type
:仅查找文件
-maxdepth
:最多下降两个级别
-not -name
(组合):从搜索中排除watch.log
-delete
:删除文件
建议
首先尝试不带-delete
标志的上述命令。这将打印出将要删除的文件列表。
对列表满意后,在命令中添加ѭ9。
,您应该使用find
:
for i in $(find . -type d)
do
do_stuff \"$i\"
done
如果您确实有很多目录,则可以将find的输出传递到while read
循环中,但是由于该循环在另一个进程中,因此使编码变得更加困难。
关于空格,请确保引用包含目录名称的变量。那应该允许您处理名称中带有空格的目录。
,使用查找?您可以使用多个参数,包括深度,文件使用期限(如统计信息),权限等。
find . -maxdepth 2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。