Estoy tratando de encontrar archivos con extensiones específicas. Por ejemplo, quiero encontrar todos los archivos .pdf y .jpg que se llaman Robert
Sé que puedo hacer este comando
$ find . -name '*.h' -o -name '*.cpp'
pero necesito especificar el nombre del archivo en sí además de las extensiones. Solo quiero ver si hay una forma posible de evitar escribir el nombre del archivo una y otra vez. ¡Gracias!

inameen su lugar, que no distingue entre mayúsculas y minúsculas .inameonamedepende de lo que desee encontrar. He estado en situaciones en las que el caso era fundamental.Respuestas:
Mi preferencia:
find . -name '*.jpg' -o -name '*.png' -print | grep Robertfuente
find -exec ...jpgopngcomo parte de un camino más largo.Usando
findel-regexargumento de ':find . -regex '.*/Robert\.\(h\|cpp\)$'O simplemente usando
-name:find . -name 'Robert.*' -a \( -name '*.cpp' -o -name '*.h' \)fuente
find -name "*Robert*" \( -name "*.pdf" -o -name "*.jpg" \)El
-orepreents unaORcondición y se puede añadir tantos como desee dentro de las llaves. Esto dice que busque todos los archivos que contengan la palabra "Robert" en cualquier lugar de sus nombres y cuyos nombres terminen en "pdf" o "jpg".fuente
Como alternativa al uso de la
-regexopción activadafind, ya que la pregunta está etiquetadaintento, puede utilizar el mecanismo de expansión de la abrazadera:eval find . -false "-o -name Robert".{jpg,pdf}fuente
evalo.en el comando anterior, o sufindes un alias para algo más complicado, o no está usando el GNU estándarfinden su versión de Linux.findno es compatible-false. He trabajado en torno a esta dando dos condiciones mutuamente excluyentes por lo que son colectivamente falsa:-inum 1 -inum 2.Esta q / a muestra cómo usar find con expresión regular: ¿Cómo usar regex con el comando find?
El patrón podría ser algo como
'^Robert\\.\\(h|cgg\\)$'fuente
Como script puedes usar:
find "${2:-.}" -iregex ".*${1:-Robert}\.\(h\|cpp\)$" -printfindccy usarlo como
p.ej
findcc # default name 'Robert' and directory . findcc Joe # default directory '.' findcc Joe /somewhere # no defaultsnota que no puedes usar
findcc /some/where #eg without the name...también como alternativa, puede utilizar
find "$1" -print | grep "$@"y
me gusta
findcc . -P '/Robert\.(h|cpp)$'fuente
Usar bash globbing (si
findno es obligatorio)fuente
De forma recurrente con ls: (-al para incluir carpetas ocultas)
ftype="jpg" ls -1R *.${ftype} 2> /dev/nullfuente