Pregunta

Tengo un directorio de esta manera:

dir
dir/somefile.txt
dir/subdir/subsub/somefile2.txt
dir/subdir2/somefile.txt

y quiero abrir todos los archivos en todos los subdirectorios en una sola instancia de un comando. Yo estaba tratando de encontrar con -exec, o xargs, pero estos abrir cada archivo con una instancia independiente de un comando.

Básicamente, quiero algo que termina como kate dir/somefile.txt dir/subdir/subsub/somefile2.txt dir/subdir2/somefile.txt, sino para cualquier número de archivos en cualquier número de subdirectorios. Estoy usando bash, pero cualquier sugerencia de guiones están bien.

Aclaración: no me refiero sólo a los archivos .txt, pero cualquier archivo ASCII (. Es decir, .php, .txt, .html, etc ..)

¿Fue útil?

Solución

Trate

kate `find . -name \*.txt -type f`

donde el -type f le impide golpear directorios.

Este es un ejemplo usando ls -1 en lugar de kate:

edd@ron:~/src/debian/R$ ls -1 `find . -type f -name \*.txt`
./R-2.10.0/src/extra/graphapp/readme.txt
./R-2.10.0/src/extra/xdr/copyrght.txt
./R-2.10.0/src/extra/xdr/README.txt
./R-2.10.0/src/gnuwin32/fixed/etc/rgb.txt
./R-2.10.0/src/gnuwin32/installer/CustomMsg.txt
./R-2.10.0/src/library/grid/inst/doc/changes.txt
./R-2.10.0/src/unix/system.txt
./R-2.9.2-ra-1.2.8/src/extra/graphapp/readme.txt
./R-2.9.2-ra-1.2.8/src/extra/xdr/copyrght.txt
./R-2.9.2-ra-1.2.8/src/extra/xdr/README.txt
./R-2.9.2-ra-1.2.8/src/gnuwin32/fixed/etc/rgb.txt
./R-2.9.2-ra-1.2.8/src/gnuwin32/installer/CustomMsg.txt
./R-2.9.2-ra-1.2.8/src/library/grid/inst/doc/changes.txt
./R-2.9.2-ra-1.2.8/src/unix/system.txt
edd@ron:~/src/debian/R$

y si realmente desea que todos los archivos en los subdirectorios simplifica la llamada a

kate `find . -type f`

Si usted está en dir/ o bien

kate `find dir -type f`

Otros consejos

Hay varias opciones posibles para esto. Estas respuestas se basan en el escenario donde se sabe que todos los archivos se pueden abrir por Kate, y que desea abrir los archivos con cualquier extensión.

find dir -type f -exec kate {} +  

kate $(find dir -type f)

kate `find dir -type f`

Las segunda y tercera formas son casi equivalentes. La principal diferencia [1] es que la primera versión se encargará de archivos con espacios en blanco en su nombre, mientras que la segunda y la tercera no lo hacen.

[1] Gracias por señalar esto NVRAM, no me di cuenta cuando me envió la respuesta.

kate $(find dir -type f)

Usted es o bien no muy familiarizado con xargs, o usted no está usando correctamente, porque lo que estamos tratando de hacer es exactamente el problema xargs está diseñado para resolver: Dada una forma arbitraria larga lista de cadenas, pasan como argumentos a un programa en el menor número de ejecuciones como sea posible mientras no se exceda de los límites del sistema en el número de argumentos que un programa puede tomar.

Tienes razón para find ... -exec, pero que también puede ser fijado. Sólo tiene que añadir + al final del comando find y listo, se comporta como xargs.

Ninguna de las soluciones anteriores que el uso kate $(...) (o el equivalente con acentos abiertos) funciona en general (que no son compatibles con los nombres de archivo con espacios, no funciona en absoluto si la lista de archivos es muy larga). Tanto find ... + y xargs superar estas limitaciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top