如何解决使用查找导致 ls 中的换行符的目录名称中的 bash 空格
我无法处理文件名中的空格
脚本: 使用 find 我选择所有目录,它们被送入 ls 以计算目录中的文件数
bash 代码:
#!/bin/bash
for adir2 in $(find . -type d);
do
echo "[$adir2]"
DIRCOUNT=$(ls -1A $adir2 |wc -l)
if [ $DIRCOUNT -eq 0 ]; then
echo $adir2 "is empty"
fi
done
测试设置:
mkdir testdir
cd testdir
mkdir 01\ dir
在此处运行脚本
结果:
[.]
[./dir]
./dir is empty
[./01]
ls: cannot access './01': No such file or directory
./01 is empty
[dir]
dir is empty
我使用的是 Ubuntu 20
备注: 以下不起作用:
find /path/to/dir -empty -type d
显示所有目录。 显然,空属性不存在。 该位置是一个带有 ext4 分区的外部 USB 驱动器。
解决方法
这应该可以满足您的要求:
#!/usr/bin/env bash
while read -d '' adir2
do
echo "[$adir2]"
dircount=$(ls -1A "$adir2" | wc -l)
if [ "$dircount" -eq 0 ]; then
echo "[$adir2] is empty"
fi
done < <(find . -type d -print0)
尽量避免使用全大写的变量。
,<div class="card-body">
<div class="btn-group">
<button type="button" class="btn btn-link" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Action</button>
<div class="dropdown-menu">
<span class="text-nowrap">Name</span><br><a href="#">Namber</a>
</div>
</div>
</div>
只需将目录名称用引号括起来即可。
但是一个建议而不是使用 find 我认为你可以使用:
DIRCOUNT=$(ls -b -1A "$adir2" |wc -l)
for adir2 in ./*/
do
echo "[$adir2]"
DIRCOUNT=$(ls -b -1A "$adir2" |wc -l)
if [ $DIRCOUNT -eq 0 ]; then
echo $adir2 "is empty"
fi
done
转义目录中的所有不可见字符和特殊字符。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。