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!
iname
en su lugar, que no distingue entre mayúsculas y minúsculas .iname
oname
depende 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 Robert
fuente
find -exec ...
jpg
opng
como parte de un camino más largo.Usando
find
el-regex
argumento 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
-o
repreents unaOR
condició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
-regex
opció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
eval
o.
en el comando anterior, o sufind
es un alias para algo más complicado, o no está usando el GNU estándarfind
en su versión de Linux.find
no 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\)$" -print
findcc
y usarlo como
p.ej
findcc # default name 'Robert' and directory . findcc Joe # default directory '.' findcc Joe /somewhere # no defaults
nota 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
find
no es obligatorio)fuente
De forma recurrente con ls: (-al para incluir carpetas ocultas)
ftype="jpg" ls -1R *.${ftype} 2> /dev/null
fuente