linux下文件名特殊符号导致的一个诡异问题
写了个bash脚本递归循环遍历文件夹。本地测试的好好的,结果传到服务器上就不行,一直死循环。以为是linux的版本问题,折腾了半天,才发现只有遍历特定那个文件夹的时候才会出现问题。
最后发现竟然有个文件夹的名字叫
当遍历到文件夹的时候,路径就成为 /home/image/
而符号在bash里是转义符号,必须用/home/image/\才行, /home/image/表示的还是 /home/image/。所以导致死循环了。
然后又实验了一下,linux下的文件夹没有限制字符,所有的可打印字符都可以作文件夹名。比方
*,,|,等在windows下是不允许做文件夹名的,但linux下就可以。但这样的文件名确实会给用户造成迷惑。比方一个叫
*的文件夹,用户如果删除的时候忘记转义,输出成 rm -rf *,那就惨了。
不知道linux的设计者为什么没考虑到这个问题?或者说考虑到了,但觉得这样的问题应该让用户自己掌控?