我今天发现了一些非常奇怪的东西——波浪号扩展似乎不适用于我的一个目录。
所以,我在一个目录中有一堆 jpg 文件,我这样做:
find . -maxdepth 3 -type f -name '*.jpg' | wc -l
>>> 10000
但是当我这样做时:
find ~+ -maxdepth 3 -type f -name '*.jpg' | wc -l
>>> 0
卧槽!!!!
我以前没有遇到过这种情况,我想知道我偶然发现了什么!我有其他目录,并且波浪号扩展在所有目录中都可以正常工作:(
回答1
这是 find
和 bash
之间的交互:
find
通常不跟随符号链接bash
不规范化PWD
bash$ TOP=/tmp/foo
bash$ rm -rf "$TOP"
bash$ mkdir -p "$TOP"/a1/{x,y,z}
bash$ ln -s a1 "$TOP"/a2
bash$ (cd "$TOP"/a1; realpath ~+; echo $PWD ~+; find ~+;)
/tmp/foo/a1
/tmp/foo/a1 /tmp/foo/a1
/tmp/foo/a1
/tmp/foo/a1/z
/tmp/foo/a1/y
/tmp/foo/a1/x
bash$ (cd "$TOP"/a2; realpath ~+; echo $PWD ~+; find ~+;)
/tmp/foo/a1
/tmp/foo/a2 /tmp/foo/a2
/tmp/foo/a2
解决方法是使用 find
的 https://pubs.opengroup.org/onlinepubs/9699919799/utilities/find.html#tag_20_47_04 选项,或附加 /
:
bash$ (cd "$TOP"/a2; realpath ~+; echo $PWD ~+; find -H ~+;)
/tmp/foo/a1
/tmp/foo/a2 /tmp/foo/a2
/tmp/foo/a2
/tmp/foo/a2/z
/tmp/foo/a2/y
/tmp/foo/a2/x
bash$ (cd "$TOP"/a2; realpath ~+; echo $PWD ~+; find ~+/;)
/tmp/foo/a1
/tmp/foo/a2 /tmp/foo/a2
/tmp/foo/a2/
/tmp/foo/a2/z
/tmp/foo/a2/y
/tmp/foo/a2/x