
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 find
desde 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 $1
es así, dog
intentará hacer coincidir la cadena de cinco caracteres 'dog'
.
Si está buscando archivos que coincidan, *.py
entonces su secuencia de comandos está configurada correctamente $1
, pero desea usar esa expresión como esta
find . -name "$1" -print0