Odpowiedź jest bardzo prosta, zostałeś zaatakowany przez coś co się nazywa shell expansion.
Wyjaśnienie:
Mamy drzewo plików takie jak to:
Kopiuj
.
├── a
│ ├── bar.txt
│ └── foo.txt
├── b
│ ├── bar.txt
│ └── foo.txt
├── bar.txt
├── c
│ ├── bar.txt
│ └── foo.txt
├── echo.sh
├── find.sh
└── foo.txt
3 directories, 10 files
Skrypt echo.sh:
Kopiuj
#!/bin/bash
set -x
echo "$@"
Wywołanie ./echo *.txt:
bar.txt foo.txt
Więc jak widzisz Twój zapis *.txt został przez powłokę rozwinięty do bar.txt foo.txt. Z racji, że bierzesz tylko pierwszy argument, to Twoje wywołanie find brzmi wtedy find -name bar.txt zamiast oczekiwanego find -name "*.txt". By temu zapobiec masz 2 wyjścia:
- Escape gwiazdki:
./script \*.txt
- Użyć cudzysłowów:
./script "*.txt"