Hacer que "buscar" funcione en un script de shell

Hacer que "buscar" funcione en un script de shell

Supongo que estoy pasando por alto algo simple, ya que parece que debería ser una tarea muy sencilla, pero me estoy quedando corto y parece que no puedo encontrar nada en los foros.

Estoy intentando ejecutar finddesde un script de shell y simplemente no hace nada.

Por ejemplo, tengo una carpeta con algunos archivos y un par de subdirectorios con archivos también:

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

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

subdir2:
evenmorefiles1.txt  evenmorefiles2.py  evenmorefiles2.sh

Quiero usar buscar para extraer todos los nombres de archivos con una cadena de búsqueda determinada (y, en última instancia, canalizar a xargs), pero parece que no puedo entender por qué exactamente el mismo comando funciona desde la línea de comandos pero no desde el script de Shell:

$ 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

Agradezco cualquier ayuda en este frente...

Respuesta1

Estás citando las comillas dobles -name '"$1"'. Debido a que estás usando comillas simples, la cadena tiene cuatro caracteres literales,comillas dobles dólar número uno comillas dobles.

Sin embargo, incluso si intercambias las comillas dobles y las comillas simples, -name "'$1'"seguirás teniendo comillas simples en tu cadena. Entonces, si $1es así, dogintentará hacer coincidir la cadena de cinco caracteres 'dog'.

Si está buscando archivos que coincidan, *.pyentonces su secuencia de comandos está configurada correctamente $1, pero desea usar esa expresión como esta

find . -name "$1" -print0

información relacionada