
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 find
a 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 $1
for, dog
você tentará corresponder a sequência de cinco caracteres 'dog'
.
Se você está procurando arquivos correspondentes, *.py
então seu script está configurado corretamente $1
, mas você deseja usar essa expressão como esta
find . -name "$1" -print0