Solo quiero obtener los archivos del directorio actual y solo generar archivos .mp4 .mp3 .exe nada más. Entonces pensé que podría hacer esto:
ls | grep \.mp4$ | grep \.mp3$ | grep \.exe$
Pero no, ya que el primer grep generará solo mp4, por lo tanto, los otros 2 grep no se utilizarán.
¿Algunas ideas? PD: Ejecutar este script en Slow Leopard.
shopt -s nullglob
y luego simplemente consulte*.exe *.mp3 *.mp4
. Ver mywiki.wooledge.org/ParsingLsRespuestas:
Por qué no:
No estoy seguro de dónde lo aprendí, pero he estado usando esto.
fuente
ls: *.exe: No such file or directory
por ejemplo:ls *.{zip,tar.gz,tar} 2>/dev/null
Use expresiones regulares con
find
:Si está canalizando los nombres de archivo:
Esto protege los nombres de archivos que contienen espacios o nuevas líneas.
OS X
find
solo admite alternancia cuando-E
se usa la opción (mejorada).fuente
find . -iregex '.*\(mp3\|mp4\|exe\)'
mysupermp3.jpg
considere agregar$
al final de la expresión regular y\\.
antes de las extensionesegrep
- grep extendido - ayudará aquíDebería hacer el trabajo.
fuente
ls
a un terminal (o con-C
opción) produce una salida de varias columnas.ls
a una tubería (o con-1
) tiene salida de columna única. (Comparar salida dels
conls | cat
).la forma más fácil es usar ls
fuente
ls
no tenga algún tipo de opción silenciosa.Por si acaso: ¿por qué no lo usas
find
?fuente
find . -name '*.mkv' -o -name '*.flv'
(agregando tantas cláusulas -o como sea necesario). Necesitaba el.
para indicar el directorio y el indicador-name
no-iname
, estoy en macOS 10.13.No hay necesidad de grep. Los comodines de Shell harán el truco.
Si has corrido
entonces los globos no coincidentes se eliminarán por completo y no se dejarán en la línea de comando sin expandir.
Si desea un globbing que no distinga entre mayúsculas y minúsculas (entonces * .mp3 coincidirá con foo.MP3):
fuente
-R
opción de enumerar archivos coincidentes en subdirectorios, pero la opción no parece tener ningún efecto y todavía solo obtengo los resultados del directorio actual.En caso de que todavía esté buscando una solución alternativa:
Siéntase libre de agregar más banderas -e si es necesario.
fuente
Para usuarios de OSX :
Si lo usa
ls *.{mp3,exe,mp4}
, arrojará un error si una de esas extensiones no tiene resultados.El uso
ls *.(mp3|exe|mp4)
devolverá todos los archivos que coincidan con esas extensiones, incluso si una de las extensiones tuvo 0 resultados .fuente
ls *.@(mp3|exe|mp4)
. Necesitasshopt -s extglob
que esto funcione. Por cierto, tambiénls
es inútil, simplemente podrías hacerloprintf '%s\n' *.@(mp3|exe|mp4)
.fuente
mdfind
produce las mejores / más rápidas búsquedas NUNCA!mdfind -name querystring | grep "\.h$"
encuentra todos los encabezados con quesrystring en el título del archivo. pronto.ls -R | findstr ".mp3"
ls -R
=> enumera subdirectorios de forma recursivafuente
Aquí hay un ejemplo que funcionó para mí.
fuente