scripts - scripting python
¿Cuál es el guión más útil que has escrito para la vida cotidiana? (30)
Solo me pregunto qué pequeños guiones / programas han escrito aquí personas que lo ayuden a uno con su vida cotidiana (también conocido como no relacionado con el trabajo).
Todo vale, innovador o no. Para mí, en este momento, es una pequeña secuencia de comandos python para calcular el ritmo de carrera dada la distancia y el tiempo transcurrido.
"backup.sh" que enfoca el contenido de un directorio y lo envía a mi cuenta de gmail.
Cambiar el nombre del archivo masivo mediante arrastrar y soltar.
Hace mucho tiempo hice un pequeño VBScript que acepta un RegEx y reemplaza los nombres de los archivos en consecuencia. Simplemente colocaría un grupo de archivos o carpetas en él. Descubrí que es muy útil a lo largo de los años.
gist.github.com/15824 (Cuidado, los comentarios están en alemán)
Copia de seguridad de MySQL Hice un script por lotes de Windows que crearía copias de seguridad incrementales de las bases de datos MySQL, crearía un nuevo volcado cada día y las respaldaría cada 10 minutos en un servidor remoto. Me salvó el culo en innumerables ocasiones, especialmente en las innumerables situaciones en las que un cliente llamaría, gritándoles que un registro simplemente "desapareció" de la base de datos. Fui "no hay problema, veamos qué sucedió" porque también escribí un script de búsqueda binaria que buscaría el último momento cuando un registro estaba presente en la base de datos. A partir de ahí, sería bastante fácil entender quién lo "robó" y por qué.
No imaginarías lo útiles que han sido y los he usado durante casi 5 años. No cambiaría a nada más simplemente porque se han probado de forma aproximada y están hechos a medida, lo que significa que hacen exactamente lo que necesito y nada más, pero los he ajustado tanto que sería muy fácil agregar más funcionalidades.
Por lo tanto, mi "obra maestra" es una copia de seguridad incremental de MySQL + sistema de búsqueda remota de respaldo + registro para Windows. También escribí una versión para Linux, pero la perdí en alguna parte, probablemente porque solo eran unas 15 líneas + un trabajo cron en lugar de aproximadamente 1.200 líneas de Windows + dos tareas programadas.
En Windows XP, configuré un trabajo AT para ejecutar este comando a diario en C: /
dir /s /b * > dirlist.txt
Esto enumera la ruta completa de todos los archivos en la unidad C. Entonces cada vez que necesito encontrar un archivo, puedo usar findstr
. Esto es mejor que usar Windows Explorer Search, ya que permite la coincidencia de expresiones regulares en toda la ruta. Por ejemplo:
findstr ".jpg" dirlist.txt
findstr /i /r "windows.*system32.*png$" dirlist.txt
Esta es una solución de configuración muy rápida, y excelente si te encuentras con una nueva instalación de Windows y sin conexión a Internet.
Si necesita buscar ciertos patrones dentro de ciertos tipos de archivos, primero enumere todos los archivos que necesita verificar y luego búsquelos. Por ejemplo, para encontrar un programa de Java o Python que invierte una imagen, puede hacer esto:
findstr "/.java /.py" dirlist.txt > narrowlist.txt
findstr /i /r /f:narrowlist.txt "flip.*image"
En mi lugar de trabajo anterior, las horas de oficina eran ridículas. Era una compañía de software y mi jefe estaba apenado. Él nos daba trabajo alrededor de las 5:30 PM (justo cuando era hora de ir a casa) y nos hizo terminar el trabajo hasta pasadas las 11:00 PM (más allá de nuestras horas productivas ideales). O encontraría problemas molestos en el código que aún estaba en progreso.
Así que hice un archivo por lotes y un script que apagaría mi computadora en un momento aleatorio entre las 7:00 p.m. y las 8:00 p.m. Tenía un temporizador de 1 minuto por si acaso me quedaba fuera de horas y necesitaba abortar el proceso de apagado.
Pero salía de mi escritorio antes de las 5:00 PM así que no podía encontrarme para retenerme si quería tirar basura a la hora de pagar. Si venía a mi escritorio y veía mi computadora encendida, pensaría que todavía estaba en el área de la despensa o en el supermercado cercano para tomar algunas papas fritas o algo así. Pero si no estaba listo en ese momento, llamaría a mi teléfono celular y me diría que volviera a la oficina.
También programé el BIOS en mi máquina para encender mi máquina alrededor de las 8:00 AM o las 9:00 AM en caso de que me sintiera flojo y quisiera dar un paseo alrededor de las 10:00 AM o las 11:00 AM. Si me atraparan caminando hacia mi escritorio, me preguntaría "¿dónde has estado toda la mañana?" Y yo diría que "estaba en una reunión con el equipo de marketing". o "Estaba fuera desayunando".
perro tonto
Escribí un guión de Python que iría a todos los cómics web que leí y descargué cualquier cómic nuevo. Solo corro eso una vez al día, y no hay necesidad de visitar cada sitio individualmente, solo visite el / Comics / Folder. ;)
Escribí un guión que terminó siendo utilizado todos los días en mi equipo. Cuando trabajaba para Intel teníamos una aplicación que hablaba con una base de datos de acceso para obtener un volcado de información de registro (trabajé en la validación de conjuntos de chips). Tomaría esta información (de una consulta SQL) y la colocaría en un archivo CSV, en un archivo HTML y en un archivo Excel. Todo el proceso tomó casi 2 horas. No es broma. No tengo idea de por qué tomó tanto tiempo. Comenzaríamos una hora antes del almuerzo, iríamos a almorzar y luego regresaríamos.
Pensé que tenía que haber una mejor manera de hacerlo. Hablé con el equipo que mantenía la base de datos del registro y obtuve el código SQL de ellos. Luego escribí un script de Perl que tomó los datos y los envió a formato CSV, HTML y Excel. Tiempo de ejecución? Alrededor de 1-2 segundos. Una gran mejora de velocidad.
También escribí algunos guiones mientras estaba en el despliegue en Iraq en 2006 (serví en la Guardia Nacional durante 9 años, salí en diciembre). Usamos esta aplicación antigua llamada ULLS-G (Sistema Logístico de Nivel de Unidad - Tierra) que fue escrita en ADA y originalmente se ejecutó en DOS. Lo piratearon lo suficiente como para ejecutarlo en Windows XP en un shell de comandos. Este sistema no tiene una interfaz de mouse. Todo fue a través del teclado y no tenía la funcionalidad de lote. Entonces, digamos que quería imprimir licencias para todos los operadores de vehículos. Bueno ... teníamos 150 soldados en nuestra unidad, así que tomó mucho tiempo. Supongamos que todos obtuvieron los requisitos para un nuevo vehículo y que desea agregarlo a las calificaciones de todos los operadores. Tuviste que hacerlo uno por uno.
Pude encontrar un controlador ODBC para la base de datos SAGE (lo que usaba ULLS-G) y entonces escribí scripts Perl que podían hablar con la base de datos SAGE. Entonces las cosas que tomaron más de una hora, ahora solo tomaron unos segundos. También utilicé mis scripts y el controlador para informar. Tuvimos que reportar toda la información hasta el batallón todas las mañanas. Otras unidades escribirían la información a mano todas las mañanas. Arreglé una macro de Excel que hablaba usando el mismo controlador y hablé con la base de datos SAGE y actualicé la hoja de cálculo de Excel de esa manera. Es la macro de Excel más complicada y única que he escrito. Valió la pena porque me otorgaron la Medalla de Mención del Ejército. Así que sí, obtuve una medalla en el ejército por escribir scripts de Perl :) ¿Cuántos pueden decir eso? ;)
Esto, desde una publicación en mi blog hace unos meses, ha pasado de ser una idea que me pareció genial a uno de los mejores pequeños hackers que he tosido en mi memoria reciente. Lo cito en su totalidad aquí:
==================
Paso mucho tiempo en Bash. Para los no iniciados, bash es un sistema que encontrarás en la mayoría de las máquinas Unix y, afortunadamente, algunas ventanas y todas las Mac que hay. A primera vista, no es más que una interfaz de línea de comandos, y por lo tanto fuera del radar de la mayoría de los usuarios que ven cosas tales como un anacronismo que preferirían olvidar.
Hago casi todo en bash. LEÍ MI CORREO ELECTRÓNICO DESDE UNA LÍNEA DE COMANDOS, razón por la cual evito el correo marcado. Navego por directorios, edito archivos, participo en el pago y entrega de mi código fuente diario, busco archivos, busco dentro de archivos, reinicio mi máquina e incluso ocasionalmente navego por páginas web desde la línea de comando. bash es el corazón y el alma de mi existencia digital.
El problema es que tiendo a tener aproximadamente 6 ventanas bash abiertas a la vez. En el trabajo de hoy, tenía uno ejecutando un servidor web, otro jugueteando con mi base de datos, un tercero, un cuarto y un quinto editando diferentes archivos, mientras que un sexto estaba pasando por mi máquina tratando de registrar los nombres de cada archivo en el sistema. ¿Por qué? Porque es útil poder buscar a través de dicho archivo si desea saber dónde encontrar un objeto por nombre de archivo.
Cuando haces esto, terminas con muchas ventanas en tu barra de control llamadas simplemente "bash". Esto está bien si solo tienes uno de ellos, pero es una agonía cuando tienes 6 o más ... y otras dos docenas de cosas están sucediendo. Tengo tres monitores bajo el comando simultáneo de un par de teclado / mouse y todavía siento la necesidad de más. Cada una de esas ventanas tiene varios terminales bash abiertos.
Así que he metido esto juntos. Primero, coloca estas líneas en tu .bash_profile:
export PROMPT_COMMAND=''export TRIM=`~/bin/trim.pl`''
export PS1="/[/e]0;/$TRIM/a/]/$TRIM> "
trap ''CMD=`history|~/bin/hist.pl`;echo -en "/e]0;$TRIM> $CMD/007"'' DEBUG
Revisé y escribí docenas de párrafos sobre cómo funciona todo esto y exactamente por qué está configurado tal como está, pero no está realmente interesado. Créeme. Hay un capítulo completo de un libro sobre por qué hice "CMD = ...
; echo ..." en esa tercera línea. Muchas personas (incluyendo Bluehost, donde está alojado mi otro dominio) todavía están usando y la versión anterior de bash con errores importantes en cómo maneja las trampas, por lo que estamos atascados con esto. Puede eliminar la CMD y reemplazarla con $ BASH_COMMAND si está al día en su versión de bash y desea realizar la investigación.
De todos modos, el primer script que uso está aquí. Crea un agradable mensaje que contiene el nombre y el directorio de su máquina, recortado a una longitud razonable:
============trim.pl===========
#!/usr/bin/perl
#It seems that my cygwin box doesn''t have HOSTNAME available in the
#environment - at least not to scripts - so I''m getting it elsewhere.
open (IN, "/usr/bin/hostname|");
$hostname = <IN>;
close (IN);
$hostname =~ /^([A-Za-z0-9-]*)/;
$host_short = $1;
$preamble = "..." if (length($ENV{"PWD"})>37);
$ENV{"PWD"} =~ /(.{1,37}$)/;
$path_short = $1;
print "$host_short: $preamble$path_short";
==============================
Hay una advertencia en la parte superior de esta publicación de blog que debería leer ahora antes de comenzar a hacer preguntas estúpidas como, "¿Por qué simplemente no usó la variable de entorno HOSTNAME a través de @ENV?" Simple: porque eso no funciona para todos los sistemas en los que lo probé.
Ahora, para la parte más genial. ¿Recuerdas la línea 3 de la adición de .bash_profile?
trap ''CMD=`history|~/bin/hist.pl`;echo -en "/e]0;$TRIM> $CMD/007"'' DEBUG
Está volcando la salida del script trim.pl en el mismo contenedor que antes, imprimiendo tanto en el símbolo del sistema como en el título de la ventana, ¡pero esta vez está agregando el comando que acaba de tipear! Es por eso que no desea hacer todo esto en su .bashrc: cualquier script que ejecute (en mi máquina, el hombre es uno de ellos) activará esto en cada línea. La producción del hombre se torna seriamente distorsionada por lo que estamos haciendo aquí. No estamos jugando muy bien con la terminal.
Para tomar el comando que acabas de escribir, tomamos la historia de bash y la cortamos un poco:
===========hist.pl============
#!/usr/bin/perl
while (<STDIN>)
{
$line = $_
}
chomp $line;
$line =~ /^.{27}(.*)/;
print $1;
==============================
Así que ahora, tengo un millón de ventanas funcionando y dicen cosas como:
castro: /home/ronb blog
Ron-D630: /C/ronb/rails/depot script/server
Ron-D630: /C/ronb/rails/depot mysql -u ron -p
Ron-D630: /C/ronb/rails/depot find . > /C/ronb/system.map
Ron-D630: /C/ronb/rails/depot vi app/views/cart.html.erb
Ron-D630: /C/perforce/depot/ p4 protect
Ron-D630: /C/perforce/depot/ p4 sync -f
Ron-D630: /C/perforce/depot/
Desde la pequeña barra feliz en la parte inferior de la pantalla, ahora puedo decir cuál es cuál en un momento. Y debido a que hemos configurado PS1, tan pronto como un comando termina de ejecutarse, el nombre del comando se reemplaza por el resultado de trim.pl nuevamente.
ACTUALIZACIÓN (el mismo día): estas cosas (las entradas de .bash_profile) me provocaron todo tipo de infiernos cuando lo probé en mi .bashrc. Su .bashrc se ejecuta mediante scripts no interactivos siempre que invoque bash como un idioma. Golpeé esto cuando estaba tratando de usar al hombre. Todo tipo de basura (el texto completo de mi .bashrc, más los capítulos de escape) apareció en la parte superior de la página de manual. Sugeriría probar esta gema con una invocación rápida de "hombre hombre" en la línea de comando una vez que lo hayas reunido todo.
Supongo que es hora de sacar la basura personalizada de mi .bashrc y ponerla donde pertenece ...
Inicialmente, me encontré escribiendo ''trampa del hombre'' en un punto de este proceso.
Hace algunos años, escribí una aplicación de winforms con la ayuda de unas pocas api de win32 para cerrarme por completo de mi computadora durante una hora para que me obligara a hacer ejercicio. Porque era flojo? No ... porque tenía un objetivo personal de fitness. A veces solo necesitas una pequeña patada para empezar :)
Me gusta guardar mis fotos en un directorio según la fecha en que se tomó la foto. Por lo tanto, escribí un programa que escaneaba una tarjeta de memoria para imágenes, creaba las carpetas de mi disco duro que necesita según las fechas de las imágenes, y luego las copiaba.
Mi script de copia de seguridad .cmd Se ejecuta en mi servidor todas las noches y nombra los archivos de respaldo según el día de la semana. Una semana completa de copias de seguridad me ha salvado a mí (y a mi familia) muchas veces:
:: Backup args: :: /V Verify? (yes/no) :: /R Restrict access to owner? (yes/no) :: /RS Removable storage? (yes/no) :: /HC Hardware compression (on/off) :: /M Backup type (normal/copy/differential/incremental/daily) :: /L Log file type (f/s/n) :: /D "Description" :: /J "Job-name" :: /F "File-name" SETLOCAL :: ensure that network drives are mounted CALL C:/bat/configs/MapShares-home.cmd echo on set today=%DATE:~0,3% if %today%==Mon set yesterday=0Sunday if %today%==Tue set yesterday=1Monday if %today%==Wed set yesterday=2Tuesday if %today%==Thu set yesterday=3Wednesday if %today%==Fri set yesterday=4Thursday if %today%==Sat set yesterday=5Friday if %today%==Sun set yesterday=6Saturday set configsDir=%~dp0 set storePath=C:/mybackups :: (eg: Monday C files) set title=%yesterday% backup set echo %DATE% %TIME% %title% > "%storePath%/%yesterday%_backup.log" CALL BackupConfigs.bat :: Create new BKF file call C:/WINDOWS/system32/ntbackup.exe backup ^ "@%configsDir%/daily.bks" ^ /V:yes /R:no /RS:no /HC:off /M normal /L:s ^ /D "%title%" ^ /J "%title%.job" ^ /F "%storePath%/%yesterday%.bkf" ^ >> "%storePath%/%yesterday%_backup.log" echo %DATE% %TIME% Completed >> "%storePath%/%yesterday%_backup.log" copy "%storePath%/%yesterday%.bkf" "V:/Backups/NEPTUNE" CALL C:/bat/clean-temps.bat defrag -v C: > "%storePath%/%yesterday%_defrag.log" :: display backup directories start /D"C:/bat/Backups/" checkbkf.bat ENDLOCAL ::pause
Mi tecla o se cayó en mi computadora portátil; así que escribí un programa que reemplaza dos "0" teclas dentro de 200 MS entre sí como un o, dos "0" teclas dentro de 700 MS entre sí como un 0 e ignorar el resto; entonces podría usar mi laptop antes de reemplazar el teclado.
Guau; No sabía que esto sería tan popular: p
En cuanto a cómo, Microsoft expone una pequeña característica de API llamada "Hooks".
http://msdn.microsoft.com/en-us/library/ms644959(VS.85).aspx#wh_keyboard_llhook
Usando ese gancho; Pude escribir un "filtro" que hizo lo que necesitaba que hiciera (pista: si devuelve 1 con su devolución de llamada, las ventanas no procesarán la pulsación de la tecla).
La razón por la que sé sobre esto en realidad no es porque estaba escribiendo un keylogger, sino porque escribí un programa smiler a Synergy un tiempo.
Y si. Escribí otro programa que intercambiaba teclas alfanuméricas con una clave alfanumérica aleatoria y sí; fue realmente divertido: D
Súper botón de reinicio remoto.
Un rack de hardware de simulación super especial (en los días en que una sala llena de cajas VME hacía menos que su GPU) que un usuario en el otro lado del mundo se bloqueaba en las primeras horas de la mañana. Le tomó una hora llegar al laboratorio y a través de la seguridad.
Pero no se nos permitió conectarnos al controlador súper especial ni modificar el hardware. La solución era una estación de trabajo DEC vieja con una impresora de matriz de puntos epson, pegue una regla de plástico a la perilla de alimentación de papel, coloque la impresora cerca del botón de reinicio.
Inicie sesión en WS como un usuario normal (no se permite la raíz, todos los puertos externos se bloquean), imprima un documento con 24 líneas en blanco, que giraron la perilla de alimentación del papel y la regla presionó sobre el restablecimiento en el hardware súper especial .
Solía trabajar en un campamento de verano de tecnología, y tuvimos que redactar estos comentarios para cada uno de los niños del grupo al final de la semana, que luego recibían y se llevaban a casa como recuerdo. Por lo general, estos consistían en un grupo de oraciones genéricas y una o dos oraciones personalizadas. Escribí un script de Python que construyó uno de estos escritos de un banco de oraciones enlatadas, y le permití al usuario agregar un par de oraciones personalizadas en el medio. Esto me ahorró una gran cantidad de tiempo a mí y a otros consejeros. Dejé entrar el secreto. A pesar de que gran parte de ella se automatizó, nuestros comentarios todavía se veían mejor que muchos de los ''honestos'', porque podíamos dedicar más tiempo a las partes personalizadas.
Soy un piloto privado. Escribí un par de guiones que obtienen información meteorológica para los aeropuertos locales de aviationweather.gov. Fueron útiles para una respuesta rápida a la pregunta "¿Hoy es un buen día para volar?"
Tengo un script de Python que se ejecuta automáticamente cuando enchufo mi cámara digital.
Copia todas las imágenes de la tarjeta en la cámara, las respalda y luego las carga en Flickr.
La pieza de carga en Flickr viene de uploadr.py (que no me puedo atribuir).
Aquí está el código de Python para descargar la cámara. Recordará a través de SRCDIR y nombrará cada imagen con la fecha y la hora antes de copiar las imágenes a DESTDIR.
#!/usr/bin/python
import os
import string
import time
import shutil
###################################################
__SRCDIR__ = "/mnt/camera"
__DESTDIR__ = "/home/pictures/recent"
###################################################
def cbwalk(arg, dirname, names):
sdatetime = time.strftime("%y%m%d%H%M")
for name in names:
if string.lower(name[-3:]) in ("jpg", "mov"):
srcfile = "%s/%s" % (dirname, name)
destfile = "%s/%s_%s" % (__DESTDIR__, sdatetime, name)
print destfile
shutil.copyfile( srcfile, destfile)
###################################################
if __name__ == "__main__":
os.path.walk(__SRCDIR__, cbwalk, None)
Un pequeño script que supervisa algunos sitios web populares para anuncios que coinciden con mis habilidades y envíeme un correo electrónico.
Un raspador HTML con hilo para descargar todos los subtítulos disponibles para series / películas desde un sitio que es difícil de usar (para mostrar más anuncios, debe hacer clic como 4 veces después de una búsqueda para acceder a la página de descargas). Ahora solo pongo los criterios de búsqueda y presiono descargar.
Un script de Greasemonkey para agregar un cuadro de control "presionar ese botón mucho" a un juego en línea.
Un script de Greasemonkey que elimina comentarios obviamente estúpidos [*] del sitio de juegos Kotaku.com.
[*] Como se identificó por errores ortográficos comunes, escritura de mayúsculas, uso excesivo de "LOL" y heurística similar.
Un script de Python rápido y sucio que buscaba el DNS para google.com cada 5 segundos y emitía un pitido si tenía éxito y dos veces si fallaba.
Escribí esto durante un tiempo en el que tuve que vivir con una red hogareña muy escabrosa. Me permitió conocer al instante el estado de la red, incluso mientras estaba de cabeza bajo el escritorio al otro lado de la habitación con las dos manos llenas de cable de red y una linterna en la boca.
Un script de shell para realizar copias de seguridad rotativas mediante rsync. También es compatible con la ejecución de programas secundarios arbitrarios para admitir otras actividades previas a la copia de seguridad (descarga de marcadores deliciosos, por ejemplo).
Una pequeña aplicación que dejó un clic (o doble clic) cada "X" ms durante un "Y" de tiempo. ¡Ya no es necesario que ese pájaro bebedor trabaje en la planta de energía nuclear! ;)
Una secuencia de comandos perl que raspa mi Craigslist local, por categorías seleccionadas, en una base de datos SQL que luego puedo consultar.
V2 actualiza la base de datos con un temporizador y me alerta si tengo una coincidencia en cualquiera de las consultas, básicamente proporcionándome un agente de fondo para CL.
Varios accesos directos a los comandos "net start" y "net stop" para que pueda iniciar y detener servicios sin tener que ingresar al MMC de servicios.
Ya no tengo el código, pero posiblemente el script más útil que escribí fue, créalo o no, en VBA. Tuve un colega molesto que tenía una mecha tan corta que lo llamé Cherry Bomb. A menudo se enojaba cuando los clientes llamaban y luego se ponían de pie y comenzaban a despotricarme sobre la pared del cubículo, matando mi productividad y mi moral.
Siempre tuve Microsoft Excel abierto. Cuando él hacía esto, yo alt-tab en Excel y allí, en la barra de herramientas, había un ícono nuevo con una imagen de una bomba de cereza. Yo haría clic discretamente en eso ... y no pasaría nada.
Sin embargo, poco después recibí una llamada telefónica y dije algo como "sí, sí, eso suena mal. Será mejor que eche un vistazo". Y luego me levantaba, me disculpaba con la bomba de cereza y me alejaba.
Lo que sucedió es que utilizamos NetWare y tenía un sistema de mensajería primitivo integrado. Cuando hice clic en el botón, una pequeña secuencia de comandos de VBA enviaba un mensaje de NetWare a mis amigos, diciéndoles que la Bomba de cereza estaba en eso otra vez. por favor, llámame. Él nunca lo descubrió :)
Yo uso esto como una función autocargada. Puedo simplemente escribir "mycd" y aparece una lista de directorios a la que frecuentemente hago un cd. Si conozco el número, puedo decir algo como "mycd 2". Para agregar un directorio a la lista, simplemente escriba "mycd / tmp / foo / somedirectory".
function mycd {
MYCD=/tmp/mycd.txt
touch ${MYCD}
typeset -i x
typeset -i ITEM_NO
typeset -i i
x=0
if [[ -n "${1}" ]]; then
if [[ -d "${1}" ]]; then
print "${1}" >> ${MYCD}
sort -u ${MYCD} > ${MYCD}.tmp
mv ${MYCD}.tmp ${MYCD}
FOLDER=${1}
else
i=${1}
FOLDER=$(sed -n "${i}p" ${MYCD})
fi
fi
if [[ -z "${1}" ]]; then
print ""
cat ${MYCD} | while read f; do
x=$(expr ${x} + 1)
print "${x}. ${f}"
done
print "/nSelect #"
read ITEM_NO
FOLDER=$(sed -n "${ITEM_NO}p" ${MYCD})
fi
if [[ -d "${FOLDER}" ]]; then
cd ${FOLDER}
fi
}
alias dir = ''ls -al'' es mi script favorito preferido.
Un script bash llamado para que si estoy en /a/very/deeply/nested/path/somewhere
y quiero ir a "subir" N directorios, puedo escribir up N
:
#!/bin/bash
LIMIT=$1
P=$PWD
for ((i=1; i <= LIMIT; i++))
do
P=$P/..
done
cd $P
Por ejemplo:
/a/very/deeply/nested/path/somewhere> up 4
/a/very>
NB por gmatt:
Trabajando con el gran trabajo anterior, se puede extender a una función de respaldo colocando lo siguiente en su bashrc:
function up( )
{
LIMIT=$1
P=$PWD
for ((i=1; i <= LIMIT; i++))
do
P=$P/..
done
cd $P
export MPWD=$P
}
function back( )
{
LIMIT=$1
P=$MPWD
for ((i=1; i <= LIMIT; i++))
do
P=${P%/..}
done
cd $P
export MPWD=$P
}
#! /bin/bash
# check to see if site is up
# if it is, don''t worry
# if it''s down, restart apache after get a process listing
#
# v.1 Warren M Myers - initial stab
# 31 Aug 06
#
ERRCOD=''7''
WHEN=`date +%d%b%y`
REPT="~/psaux.$WHEN.txt"
STARS=''********************''
curl -I http://www.shodor.org > /var/tmp/curlret.txt
if [ "$?" = "$ERRCOD" ]; then
# return was unable to connect to host: save ps -aux; mail report
ps -aux > $REPT
echo $STARS
echo ''curl return results''
echo
cat curlret.txt
echo
echo $STARS
echo ''ps -aux results''
cat $REPT
echo
echo $STARS
echo ''restarting apache''
/etc/init.d/apache2 restart
echo ''apache restarted''
echo
echo "ps -aux results saved in $REPT"
fi
rm -f /var/tmp/curlret.txt