bash - 波浪号扩展不适用于某些目录

我今天发现了一些非常奇怪的东西——波浪号扩展似乎不适用于我的一个目录。

所以,我在一个目录中有一堆 jpg 文件,我这样做:

find . -maxdepth 3 -type f -name '*.jpg' | wc -l
>>> 10000

但是当我这样做时:

find ~+ -maxdepth 3 -type f -name '*.jpg' | wc -l
>>> 0

卧槽!!!!

我以前没有遇到过这种情况,我想知道我偶然发现了什么!我有其他目录,并且波浪号扩展在所有目录中都可以正常工作:(

回答1

这是 findbash 之间的交互:

  • 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

解决方法是使用 findhttps://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

相似文章

随机推荐

最新文章