Cuando uso find
, a menudo encuentra múltiples resultados como
find -name pom.xml
./projectA/pom.xml
./projectB/pom.xml
./projectC/pom.xml
A menudo quiero seleccionar solo un resultado específico, (por ejemplo edit ./projectB/pom.xml
). ¿Hay alguna manera de enumerar la find
salida y seleccionar un archivo para pasar a otra aplicación? me gusta:
find <print line nums?> -name pom.xml
1 ./projectA/pom.xml
2 ./projectB/pom.xml
3 ./projectC/pom.xml
!! | <get 2nd entry> | xargs myEditor
?
[Editar] Me he encontrado con algunos errores extraños con algunas de las soluciones mencionadas. Entonces me gustaría explicar los pasos para reproducir:
git clone http://git.eclipse.org/gitroot/platform/eclipse.platform.swt.git
cd eclipse.platform.swt.git
<now try looking for 'pom.xml' and 'feature.xml' files>
[Editar] Solución 1 Hasta ahora, una combinación de 'nl' (salida de enumeración), head & tail parece funcionar si los combino en funciones y uso $ (!!).
es decir:
find -name pom.xml | nl #look for files, enumirate output.
#I then define a function called "nls"
nls () {
head -n $1 | tail -n 1
}
# I then type: (suppose I want to select item #2)
<my command> $(!!s 2)
# I press enter, it expands like: (suppose my command is vim)
vim $(find -name pom.xml |nls 2)
# bang, file #2 opens in vim and Bob's your uncle.
[Editar] Solución 2 El uso de "select" parece funcionar bastante bien también. ex:
findexec () {
# Usage: findexec <cmd> <name/pattern>
# ex: findexec vim pom.xml
IFS=$'\n';
select file in $(find -type f -name "$2"); do
#$EDITOR "$file"
"$1" "$file"
break
done;
unset IFS
}
Your find command | head -TheNumberYouWant
Cumple sus requisitos? (Con su línea:!! | head -2 | xargs myEditor
)Respuestas:
Use
bash
incorporadoselect
:Para la pregunta de "bonificación" agregada en el comentario:
fuente
select
no parece ubicarse bien con alteracionesIFS
.( IFS=$'\n'; select file in $(find -maxdepth 2 -name '*.txt'); do echo "$file"; done; )
Dos pequeñas funciones lo ayudarán a resolver esto siempre que sus nombres de archivo no contengan nuevas líneas u otros caracteres que no se impriman. (Maneja nombres de archivos que contienen espacios).
Ejemplo
fuente
pom.xml
nunca contendrá espacios en blanco (:findnum
?podrías obtener la cabeza de las salidas totales y ajustarla con -1. esto puede canalizar la salida en cualquier otro comando o editor, por ejemplo.
(consígueme 100 líneas e imprímame en la última tubería las 100) encontrar. El | cabeza -100 | cola -1
te dará la línea número 100 de hallazgos.
fuente
Si su objetivo es editar archivos después de una búsqueda, intente sag / sack .
Ejemplo:
... para editar el último resultado de búsqueda ...
La ventaja es que puede volver más tarde y editar el primer resultado de búsqueda con
fuente