Fazendo `find` funcionar em um script de shell

Fazendo `find` funcionar em um script de shell

Suponho que estou negligenciando algo simples, pois parece que deveria ser uma tarefa muito simples, mas estou falhando e não consigo encontrar nada nos fóruns.

Estou tentando executar finda partir de um script de shell e ele simplesmente não está fazendo nada.

Por exemplo, eu tenho uma pasta com alguns arquivos e alguns subdiretórios com arquivos também:

$ ls *
afile1.txt  anotherfile.py  findit.sh

subdir1:
morefiles1.txt  morefiles2.txt  morefiles3.txt  somescript.py

subdir2:
evenmorefiles1.txt  evenmorefiles2.py  evenmorefiles2.sh

Quero usar find para extrair todos os nomes de arquivos com uma determinada string de pesquisa (e, finalmente, canalizar para xargs), mas não consigo descobrir por que exatamente o mesmo comando funciona na linha de comando, mas não no shell script:

$ cat findit.sh 
#!/bin/bash
echo $(which find)
echo "find . -name '"$1"' -print0"
find . -name '"$1"' -print0
echo "nothin??"
$ . findit.sh '*py'
/usr/bin/find
find . -name '*py' -print0
nothin??
$ find . -name '*py' -print0
./anotherfile.py./subdir2/evenmorefiles2.py./subdir1/somescript.py

Agradeço qualquer ajuda nesta frente ...

Responder1

Você está citando aspas duplas, -name '"$1"'. Como você está usando aspas simples, a string tem literalmente quatro caracteres,aspas duplas dólar número um aspas duplas.

No entanto, mesmo se você trocar aspas duplas e aspas simples, -name "'$1'"ainda terá aspas simples em sua string. Então, se $1for, dogvocê tentará corresponder a sequência de cinco caracteres 'dog'.

Se você está procurando arquivos correspondentes, *.pyentão seu script está configurado corretamente $1, mas você deseja usar essa expressão como esta

find . -name "$1" -print0

informação relacionada