bash:现有文件不存在-或者存在?还是不存在?

bash:现有文件不存在-或者存在?还是不存在?

我遇到了一个无法解决的问题,希望在这里得到一些帮助。

在名为的目录中qemu-servers应该有一个名为的文件100.conf。但是,bash 没有显示它,但如果我测试它,它就在那里......

root@proxmox:/etc/pve/nodes/proxmox/qemu-server# test 100.conf && echo "Found" || echo "Not found"
Found

如果我ls -a这样做则不会显示:

root@proxmox:/etc/pve/nodes/proxmox/qemu-server# ls -a
.  ..  101.conf

有一个名为的文件101.conf,但没有100.conf

如果我尝试执行rm100.conftouch其他任何操作,bash 都会返回错误:

root@proxmox:/etc/pve/nodes/proxmox/qemu-server# rm 100.conf
rm: cannot remove ‘100.conf’: No such file or directory
root@proxmox:/etc/pve/nodes/proxmox/qemu-server# touch 100.conf
touch: cannot touch ‘100.conf’: File exists

我怎样才能摆脱这个问题?

答案1

问题在于:

test 100.conf

它正在进行字符串测试,即字符串是否100.conf不为空。由于它不为空,因此您始终会得到Found

这类似于:

test -n 100.conf
[ 100.conf ]
[ -n 100.conf ]

您需要检查文件是否存在,即test -f

test -f 100.conf && echo "Found" || echo "Not found"

相关内容