Vous vous demandez simplement quels sont les petits scripts/programmes que les gens ici ont écrits qui aident à vivre au quotidien (c'est-à-dire sans rapport avec le travail).
Tout se passe, révolutionnaire ou pas. Pour moi, c’est un petit script python) permettant de calculer la vitesse de course en fonction de la distance et du temps écoulé.
Ma clé est tombée sur mon ordinateur portable; j'ai donc écrit un programme qui remplace deux "0" à 200 MS l'un de l'autre par un o, deux "0" à un maximum de 700 MS l'un de l'autre en tant que 0 et ignore le reste; pour pouvoir utiliser mon ordinateur portable avant de remplacer le clavier.
Sensationnel; Je ne savais pas que cela serait si populaire: p
Pour ce qui est de savoir comment - Microsoft expose une petite fonctionnalité de l'API appelée "Crochets".
http://msdn.Microsoft.com/en-us/library/ms644959 (VS.85) .aspx # wh_keyboard_llhook
En utilisant ce crochet; J'ai pu écrire un "filtre" qui répondait à mes besoins (indice: si vous renvoyez 1, votre fenêtre de rappel ne traitera pas la frappe).
La raison pour laquelle je suis au courant n’est pas parce que j’écrivais un enregistreur de frappe - mais parce que j’écrivais un programme qui souriait à Synergy il ya quelque temps.
Et oui. J'ai écrit un autre programme qui permutait les clés alphanumériques avec une clé aléatoire alphanumérique et oui; c'était vraiment drôle: D
Je n'ai plus le code, mais le script le plus utile que j'ai écrit était, croyez-le ou non, en VBA. J'ai eu un collègue agaçant qui avait un fusible si court que je l'ai appelé Cherry Bomb. Il se fâchait souvent lorsque les clients appelaient, puis se levaient et commençaient à me harceler par-dessus le mur du box, ce qui détruisait ma productivité et mon moral.
J'ai toujours ouvert Microsoft Excel. Quand il faisait cela, je changeais d'onglet vers Excel et il y avait dans la barre d'outils une nouvelle icône avec une image d'une bombe cerise. Je clique discrètement sur ça ... et rien ne se passera.
Cependant, peu de temps après, je recevais un appel téléphonique et disais quelque chose du type "ouais, ouais, ça sonne mal. Je ferais mieux de regarder." Et puis je me levais, m'excusais devant le Cherry Bomb et m'éloignais.
Ce qui s’est passé, c’est que nous utilisions NetWare et qu’il disposait d’un système de messagerie primitif intégré. Lorsque je cliquais sur le bouton, un petit script VBA envoyait un message NetWare à mes amis pour leur dire que la bombe cerise était à nouveau à leur place. s'il te plait appelle moi. Il ne l'a jamais compris :)
Un script bash appelé en haut de sorte que si je suis en /a/very/deeply/nested/path/somewhere
et je veux "monter" N répertoires, je peux taper up N
:
#!/bin/bash
LIMIT=$1
P=$PWD
for ((i=1; i <= LIMIT; i++))
do
P=$P/..
done
cd $P
Par exemple:
/a/very/deeply/nested/path/somewhere> up 4
/a/very>
NB par gmatt:
En partant de l'excellent travail ci-dessus, il peut être étendu à une fonction de dos en plaçant les éléments suivants dans votre 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
}
Super bouton de réinitialisation à distance.
Un rack de matériel de simulation super spécial (à l’époque où une salle remplie de VME caisses faisait moins que votre GPU)] qu’un utilisateur de la L’autre côté du monde s’écraserait tôt le matin, il faudrait une heure pour aller au laboratoire et passer par la sécurité.
Mais nous n’avions pas le droit de nous connecter au contrôleur super spécial ni de modifier le matériel. La solution était un ancien poste de travail DEC avec une imprimante matricielle epson, une règle en plastique collée sur le bouton d’alimentation du papier, positionnez l’imprimante près du bouton de réinitialisation.
Connectez-vous au serveur Web en tant qu’utilisateur ordinaire (aucun utilisateur root autorisé, tous les ports externes verrouillés), imprimez un document comportant 24 lignes vierges - ce qui a entraîné la rotation du bouton d’alimentation du papier et la règle enfoncée - super spécial matériel.
Sur Windows XP, j'ai défini un travail AT) pour exécuter cette commande quotidiennement dans C: \
dir /s /b * > dirlist.txt
Ceci répertorie le chemin complet de tous les fichiers du lecteur C. Ensuite, chaque fois que j'ai besoin de trouver un fichier, je peux utiliser findstr
. Cela bat en utilisant Windows Explorer Search car il permet la correspondance d'expression régulière sur le chemin d'accès complet. Par exemple:
findstr ".jpg" dirlist.txt
findstr /i /r "windows.*system32.*png$" dirlist.txt
Il s’agit d’une solution très rapide à configurer et idéale si vous vous retrouvez avec une nouvelle installation de Windows et aucune connexion Internet.
Si vous avez besoin de rechercher certains motifs dans certains types de fichiers, dressez d'abord une liste de tous les fichiers à vérifier, puis effectuez une recherche dans ceux-ci. Par exemple, pour trouver un programme Java ou Python qui retourne une image), procédez comme suit:
findstr "\.Java \.py" dirlist.txt > narrowlist.txt
findstr /i /r /f:narrowlist.txt "flip.*image"
J'ai un script Python qui s'exécute automatiquement lorsque je branche mon appareil photo numérique.
Il copie toutes les images de la carte sur la caméra, les sauvegarde, puis les télécharge sur Flickr.
La pièce upload-to-Flickr provient de ploadr.py (pour lequel je ne peux pas prendre crédit).
Voici le code Python pour le déchargement de la caméra. Il est récursif via SRCDIR et nomme chaque image avec la date et l'heure avant de les copier sur 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 __== "__main__":
os.path.walk(__SRCDIR__, cbwalk, None)
Il y a quelques années, j'ai écrit une application Winforms à l'aide de quelques API Win32 pour me verrouiller complètement hors de mon ordinateur pendant une heure afin de me forcer à faire de l'exercice. Parce que j'étais paresseux? Non ... parce que j'avais un objectif de fitness personnel. Parfois, vous avez juste besoin d'un coup de pied pour commencer :)
J'ai écrit un script Python) qui irait à toutes les bandes dessinées Web que j'ai lues et téléchargerait toute nouvelle bande dessinée. il suffit de visiter le/BD/Dossier.;)
Mon script de sauvegarde .cmd. Il fonctionne sur mon serveur tous les soirs et nomme les fichiers de sauvegarde en fonction du jour de la semaine. Une semaine complète de sauvegardes m'a sauvé (ainsi que ma famille) à plusieurs reprises:
:: Arguments de sauvegarde: ::/V Verify? (oui/non) ::/R Restreindre l'accès au propriétaire? (oui/non) ::/RS Stockage amovible? (yes/no) ::/HC Compression matérielle (on/off) ::/M Type de sauvegarde (normal/copie/différentiel/incrémental/quotidien) ::/L Type de fichier journal (f/s/n) ::/D "Description" ::/J "Nom du travail" ::/F "Fichier- name " SETLOCAL :: assurez-vous que les lecteurs réseau sont montés CALL C:\bat\configs\MapShares-home.cmd écho sur réglé aujourd'hui =% DATE: ~ 0,3% si% aujourd'hui% == Mon réglé hier = 0 dimanche si% aujourd'hui% == Jeu mardi = 1 lundi si% aujourd'hui% == Jeu mercredi = 2 mardi si% aujourd'hui% == Jeu hier = 3 mercredi (.____.) si% aujourd'hui% == Jeu vendredi = 4 jeudi Si% aujourd'hui% == Sam mis à jour hier = 5 vendredi Si% aujourd'hui% == Jeu du soleil hier = 6 samedi Ensemble configsDir =% ~ dp0 set storePath = C:\mybackups :: (par exemple: fichiers Monday C) set title =% hier% backup set echo% DATE%% HEURE%% titre%> "% storePath% \% hier% _backup.log" CALL BackupConfigs.bat :: Créez un nouveau fichier BKF Appelez C:\WINDOWS\system32\ntbackup.exe backup ^ "@% ConfigsDir%\daily.bks "^ /V: oui/R: non/RS: non/HC: éteint/M normal/L: s ^ /D"% title% "^ /J "% title% .job" ^ /F "% storePath% \% hier% .bkf" ^ >> "% storePath% \% hier% _backup.log" echo% DATE%% TIME% Terminé >> "% storePath% \% hier% _backup.log" copie "% storePath% \% hier % .bkf "" V:\Backups\Neptune " APPELER C:\bat\clean-temps.bat defrag -v C:>" % storePath% \% hier% _defrag.log " :: afficher les répertoires de sauvegarde démarrer/D" C:\bat\Backups\"checkbkf.bat ENDLOCAL :: pause
"backup.sh" qui prépare le contenu d'un répertoire et l'envoie à mon compte gmail.
J'ai écrit un script qui finissait par être utilisé tous les jours dans mon équipe. Lorsque je travaillais pour Intel, nous avions une application qui communiquait avec une base de données d'accès pour récupérer une information de registre (j'ai travaillé sur la validation des jeux de puces). Il prendrait ces informations (à partir d'une requête SQL) et les sauvegarderait dans un fichier CSV, un fichier HTML et un fichier Excel. L'ensemble du processus a pris presque 2 heures. Sans blague. Aucune idée pourquoi cela a pris si longtemps. Nous allions le commencer une heure avant le déjeuner, aller déjeuner, puis revenir.
Je pensais qu'il devait y avoir une meilleure façon de faire cela. J'ai parlé à l'équipe qui a géré la base de registre et obtenu le code SQL. J'ai ensuite écrit un script Perl qui saisissait les données et les exportait aux formats CSV, HTML et Excel. Runtime? Environ 1-2 secondes. Une grande amélioration de la vitesse.
J'ai également écrit quelques scripts lors de mon déploiement en Irak en 2006 (j'ai servi dans la Garde nationale pendant 9 ans - je suis sorti en décembre). Nous avons utilisé cette ancienne application appelée ULLS-G (Système logistique au niveau de l'unité - Terre), écrite en ADA et exécutée à l'origine sous DOS. Ils ont suffisamment piraté l'endroit où il fonctionnerait sous Windows XP dans un shell de commande. Ce système ne possédait pas d'interface souris. Tout se faisait via le clavier et il ne comportait AUCUNE fonctionnalité de traitement par lots. Vous avez voulu imprimer des licences pour tous les conducteurs de véhicules? Eh bien ... nous avions 150 soldats dans notre unité, cela a donc pris beaucoup de temps. Supposons que tout le monde soit qualifié sur un nouveau véhicule et que vous vouliez l'ajouter aux qualifications de chacun. dû le faire un par un.
J'ai pu trouver un pilote ODBC pour la base de données SAGE (ce qu'utilisait ULLS-G)) et j'ai donc écrit des scripts Perl permettant de communiquer avec la base de données SAGE. heure, cela ne me prenait plus que quelques secondes, j’utilisais aussi mes scripts et le chauffeur pour faire rapport. Nous devions signaler toutes les informations jusqu’au bataillon tous les matins, les autres unités les écrivant à la main tous les matins. Je préparais une macro Excel. qui a utilisé le même pilote, la base de données SAGE et mis à jour le tableur Excel de cette façon, c’est la macro la plus compliquée et la plus seulement que je connaisse Cela a porté ses fruits car ils m'ont décerné la Médaille de la Mention élogieuse de l'Armée. Alors oui, j'ai reçu une médaille dans l'armée pour avoir écrit des scripts Perl :) Combien peuvent dire ça? ;)
Je suis un pilote privé. J'ai écrit quelques scripts qui permettent d'obtenir des informations météorologiques pour les aéroports locaux auprès de aviationweather.gov. Ils ont été utiles pour une réponse rapide à la question "Le jour est-il bon pour voler?"
Un script Greasemonkey qui supprime les commentaires évidemment stupides [*] du site de jeux Kotaku.com.
[*] Identifié par les fautes d'orthographe courantes, l'écriture en majuscules, l'utilisation excessive de "LOL" et des heuristiques similaires.
alias dir = 'ls -al' est mon script préféré.
Un racleur HTML fileté permettant de télécharger tous les sous-titres disponibles pour les séries/films depuis un site difficile à utiliser (vous devez cliquer 4 fois après une recherche pour accéder à la page de téléchargement, uniquement pour afficher davantage d’annonces). Maintenant, je viens de mettre les critères de recherche et appuyez sur Télécharger.
Un script Perl qui extrait ma liste Craigslist locale, par catégories sélectionnées, dans une base de données SQL sur laquelle je peux ensuite lancer une requête.
La version 2 de cette base met à jour la base de données avec une minuterie et m'avertit si j'ai une correspondance avec l'une des requêtes, me fournissant essentiellement un agent d'arrière-plan pour CL.
Renommage de fichiers en masse par glisser-déposer.
Il y a bien longtemps, j'ai créé un petit VBScript qui accepte un RegEx et remplace les noms de fichiers en conséquence. Vous voudriez simplement déposer un tas de fichiers ou de dossiers dessus. J'ai trouvé cela très utile au fil des ans.
Gist.github.com/15824 (Attention, les commentaires sont en allemand)
Ceci, tiré d'un message dans mon blog il y a quelques mois, est passé d'une idée que je trouvais cool à une des meilleures petites bêtises que j'ai crachées de mémoire récente. Je le cite en entier ici:
===================
Je passe beaucoup de temps à Bash. Pour les non-initiés, bash est un système que vous trouverez sur la plupart des machines Unix et, heureusement, sur certaines fenêtres et sur tous les Mac. À première vue, ce n’est rien d’autre qu’une interface de ligne de commande, et donc à l’écart de la plupart des utilisateurs qui voient de telles choses comme un anachronisme qu’ils préféreraient oublier.
Je fais presque tout en bash. JE LISE MON EMAIL À PARTIR D'UNE LIGNE DE COMMANDE, c'est pourquoi j'évite les courriels annotés. Je navigue dans des répertoires, modifie des fichiers, participe à la récupération et à la livraison quotidiennes de mon code source, recherche des fichiers, effectue une recherche dans des fichiers, redémarre ma machine et même, occasionnellement, navigue sur des pages Web à partir de la ligne de commande. bash est le cœur et l'âme de mon existence numérique.
Le problème, c’est que j’ai tendance à ouvrir environ 6 fenêtres bash à la fois. Au travail, aujourd’hui, j’en possédais un qui exécutait un serveur Web, un autre qui manipulait ma base de données, un troisième, un quatrième et un cinquième éditeurs de fichiers différents, tandis qu’un sixième était en train d’écraser ma machine en essayant d’enregistrer le nom de chaque fichier du système. Pourquoi? Parce qu'il est pratique de pouvoir parcourir une telle archive si vous voulez savoir où trouver un objet par nom de fichier.
Lorsque vous faites cela, vous vous retrouvez avec beaucoup de fenêtres dans votre barre de contrôle simplement nommée "bash". C’est bien si vous n’en avez qu’un seul, mais son agonie quand vous en avez 6 ou plus ... et deux douzaines de choses en cours. J'ai trois écrans contrôlés simultanément par une paire clavier/souris et je ressens encore le besoin d'en avoir plus. Chacune de ces fenêtres a plusieurs terminaux bash ouverts.
J'ai donc plunked cela ensemble. Commencez par placer ces lignes dans votre fichier .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
J'ai parcouru et écrit des dizaines de paragraphes sur la manière dont tout cela fonctionne et sur la raison pour laquelle elle est configurée telle qu'elle est, mais vous n'êtes pas vraiment intéressé. Croyez-moi. Il y a un chapitre entier d'un livre dans lequel j'ai écrit "CMD = ...
; echo ... "sur cette troisième ligne. De nombreuses personnes (y compris bluehost, où mon autre domaine est hébergé) utilisent encore l'ancienne version de bash avec des bugs majeurs affectant la gestion des pièges, nous sommes donc coincés avec cela. Vous pouvez supprimez le CMD et remplacez-le par $ BASH_COMMAND si vous êtes au courant de votre version bash et que vous avez envie de faire la recherche.
Quoi qu'il en soit, le premier script que j'utilise est ici. Il crée une belle invite contenant le nom de votre machine et votre répertoire, découpés à une longueur raisonnable:
============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";
==============================
En haut de cet article de blog, vous devez lire un avertissement avant de commencer à poser des questions stupides telles que "Pourquoi n'avez-vous pas simplement utilisé la variable d'environnement HOSTNAME via @ENV?" Simple: Parce que cela ne fonctionne pas pour tous les systèmes sur lesquels j'ai essayé.
Maintenant pour le peu vraiment cool. Rappelez-vous la ligne 3 de l'addition .bash_profile?
trap 'CMD=`history|~/bin/hist.pl`;echo -en "\e]0;$TRIM> $CMD\007"' DEBUG
Cela décharge la sortie du script trim.pl dans le même conteneur qu'auparavant, en imprimant à la fois l'invite de commande et le titre de la fenêtre, mais cette fois-ci, il ajoute la commande que vous venez de taper! C'est pourquoi vous ne voulez pas faire tout cela dans votre .bashrc: tout script que vous exécutez (sur ma machine, man est l'un d'eux) déclenchera cette opération sur chaque ligne. la production de l'homme est sérieusement altérée par ce que nous faisons ici. Nous ne jouons pas exactement à Nice avec le terminal.
Pour saisir la commande que vous venez de taper, nous prenons l'historique de bash et le coupons en dés:
===========hist.pl============
#!/usr/bin/Perl
while (<STDIN>)
{
$line = $_
}
chomp $line;
$line =~ /^.{27}(.*)/;
print $1;
==============================
Alors maintenant, j'ai un bazillion de fenêtres et ils disent des choses comme:
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/
De l'heureux petit bar au bas de l'écran, je peux maintenant dire lequel est lequel au premier coup d'œil. Et comme nous avons défini PS1, dès qu’une commande est exécutée, le nom de la commande est à nouveau remplacé par la sortie de trim.pl.
UPDATE (même jour): Ce truc (les entrées .bash_profile) a jeté toutes sortes d’enfer sur moi lorsque j’ai essayé dans mon .bashrc. Votre .bashrc est exécuté par des scripts non interactifs chaque fois que vous appelez bash en tant que langage. Je frappe ceci quand j'essayais d'utiliser l'homme. Toutes sortes de déchets (le texte complet de mon .bashrc, plus des caractères d'échappement) sont apparus en haut de la page de manuel. Je suggérerais de tester cette pierre précieuse avec une invocation rapide "homme à la machine" sur la ligne de commande une fois que vous l'aurez trouvée.
Je suppose qu'il est temps pour moi de retirer la poubelle personnalisée de mon .bashrc et de la mettre à sa place ...
Incidemment, je me suis retrouvé à taper "piège homme" à un moment donné de ce processus.
À mon ancien lieu de travail, les heures de bureau étaient ridicules. C'était une entreprise de logiciels et mon patron était nul. Il nous donnait du travail vers 17 h 30 (au moment de rentrer chez nous) et nous faisait finir le travail jusqu'à 23 h 00 (bien au-delà de nos heures productives idéales). Ou il trouverait des problèmes ennuyeux dans le code qui était toujours en cours.
Donc j'ai créé un fichier de commandes et un script qui éteindrait mon ordinateur à une heure quelconque entre 19h00 et 20h00. Il y avait une minuterie de 1 minute au cas où je resterais après des heures et que je devais interrompre le processus d'arrêt.
Mais je quitterais mon bureau avant 17h00 afin qu'il ne puisse pas me trouver pour me garder s'il voulait jeter de la merde autour de l'heure du départ. S'il venait à mon bureau et voyait mon ordinateur allumé, il penserait que je suis toujours dans la zone du garde-manger ou dans le minimart voisin pour prendre des frites ou quelque chose du genre. Mais s'il était éteint à cette heure-là, il appellerait mon téléphone portable et me dirait de rentrer au bureau.
J'ai également programmé le BIOS sur ma machine pour allumer la machine vers 8h00 ou 9h00 au cas où je me sentirais paresseux et que je voulais me promener vers 10h00 ou 11h00. Si je me trouvais pris à me rendre à mon bureau, il me demanderait "Où as-tu passé toute la matinée?" Et je dirais "j'étais à une réunion avec l'équipe marketing." ou "J'étais en train de prendre mon petit déjeuner."
chien muet
Un script rapide et sale Python) qui recherchait le DNS pour google.com toutes les 5 secondes et émettait un bip si cela réussissait et deux fois s’il échouait.
J'ai écrit ceci à une époque où je devais vivre avec un réseau domestique extrêmement floconneux. Cela m'a permis de connaître instantanément l'état du réseau alors même que j'étais la tête la première sous le bureau de l'autre côté de la pièce, les deux mains pleines d'un câble réseau et d'une lampe de poche dans la bouche.
Auparavant, je travaillais dans un camp d'été technologique et nous devions rédiger ces récits pour chacun des enfants du groupe à la fin de la semaine, qu'ils recevraient ensuite et ramèneraient à la maison comme souvenirs. Celles-ci consistaient généralement en un ensemble de phrases génériques et en une à deux phrases personnalisées. J'ai écrit un script python) qui construit l'un de ces comptes rendus à partir d'une banque de phrases préenregistrées et permet à l'utilisateur d'ajouter quelques phrases personnalisées au milieu. J'ai laissé entrer le secret pour moi et d'autres conseillers. Même si cela a été automatisé en grande partie, nos comptes rendus ont toujours paru meilleurs que beaucoup d'autres "honnêtes", car nous pouvions consacrer plus de temps aux parties personnalisées.
J'utilise cela comme une fonction autoloaded. Je peux simplement taper "mycd" et une liste de répertoires apparaît que je cd fréquemment. Si je connais le numéro, je peux simplement dire quelque chose comme "mycd 2". Pour ajouter un répertoire à la liste, il vous suffit de taper "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
}
#! /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
Un petit script qui surveille certains sites Web populaires pour trouver des annonces qui correspondent à mes compétences et m'envoie un courrier électronique.
Un script Greasemonkey pour ajouter une boîte de contrôle "appuyez beaucoup sur ce bouton" à un jeu en ligne.
J'aime stocker mes photos dans un répertoire en fonction de la date à laquelle la photo a été prise. Par conséquent, j’ai écrit un programme qui permettrait de numériser une carte mémoire pour des images, de créer tous les dossiers sur mon disque dur nécessaires en fonction de la date des images, puis de les copier.
Un script shell pour effectuer des sauvegardes tournantes à l’aide de rsync. Il prend également en charge l'exécution de programmes enfants arbitraires pour prendre en charge d'autres activités préalables à la sauvegarde (téléchargement de délicieux signets, par exemple).
A écrit un script pour cliquer sur mon bouton de démarrage, puis cliquez à nouveau dessus en une demi-seconde et répétez-la toutes les 30 secondes.
Me laisse marqué comme étant en ligne au travail et je peux effectuer le travail réel sur mon ordinateur portable juste à côté. Pas embourbé par un logiciel de travail.
Ne le dis pas au patron :)
Divers raccourcis vers les commandes "net start" et "net stop" pour que je puisse démarrer et arrêter des services sans avoir à entrer dans la console MMC Services
Une petite application qui a laissé un clic (ou un double-clic) toutes les "X" ms pendant un "Y". Plus besoin de cet oiseau buveur pour travailler à la centrale nucléaire! ;)
Sauvegarde MySQL. J'ai créé un script batch Windows qui créerait des sauvegardes incrémentielles des bases de données MySQL, créerait une nouvelle sauvegarde tous les jours et les sauvegarder toutes les 10 minutes sur un serveur distant. Cela m'a épargné un nombre incalculable de fois, en particulier dans les innombrables situations dans lesquelles un client téléphonait en criant qu'un enregistrement venait juste de "disparaître" de la base de données. Je suis allé "pas de problème, voyons ce qui s'est passé" parce que j'ai aussi écrit un script de recherche binaire qui chercherait le dernier moment où un enregistrement était présent dans la base de données. À partir de là, il serait assez facile de comprendre qui l'a "volé" et pourquoi.
Vous n’imaginez pas à quel point ces outils ont été utiles et je les utilise depuis presque 5 ans. Je ne passerais pas à autre chose simplement parce qu'ils ont été rigoureusement testés et qu'ils sont fabriqués sur mesure, ce qui signifie qu'ils font exactement ce dont j'ai besoin et rien de plus, mais je les ai tellement modifiés que ce serait un jeu d'enfant d'ajouter du temps supplémentaire. fonctionnalités.
Mon "chef-d'œuvre" est donc un système de sauvegarde incrémentielle MySQL + système de recherche distant + système de journalisation pour Windows. J'ai aussi écrit une version pour Linux mais je l'ai perdue quelque part, probablement parce qu'il ne s'agissait que d'environ 15 lignes + un travail cron au lieu de 1 200 lignes environ de Windows + deux tâches planifiées.
J'ai un script qui extrait les tags id3 et code les chansons nouvellement dans un certain format, puis les ajoute en fonction des tags à ma bibliothèque musicale.
300 lignes de python. Principalement parce que boiteux n'est pas capable de traiter les tags de manière agréable.
J'ai écrit une simple VB) qui suivait les numéros de jeu de Freecell auxquels j'avais joué et que j'avais terminé avec succès, et je l'avais toujours lancée avec une graine différente.
.... à partir de 1 ....
Le nombre maximum de jeu est 65k. Malheureusement, après plus de 5 ans, je ne suis encore que par centaines. Mais au moins, je sais que je n'ai jamais joué la même main deux fois!
** Postscript - c'est le niquement VB que j'ai jamais écrite. Je me suis remis à crier en C++ ....
Script VBS permettant de créer une structure de fichier AAAA/AAAA-MM/AAAA-MM-JJ dans mon dossier de photos et de déplacer les photos de mon appareil photo dans le dossier approprié.
J'ai écrit quelques lignes de code pour modifier automatiquement toutes les choses suggérées par powertop lorsque je débranche mon ordinateur portable et que je l'annule si je le rebranche. Puissance maximale, efficacité maximale, confort maximal.
Un petit programme de barres de tâches qui extrait chaque constante de code d'erreur d'un JavaDoc tiers et me permet de rechercher le nom de constante pour un code d'erreur donné. De plus, ajoutez toutes les conversions de HEX en décimales, etc.
Cela revient souvent lorsque vous travaillez dans le débogueur - vous récupérez le code d'erreur, mais il est très pénible de retrouver le code en texte. C'est encore plus courant lorsque vous utilisez un logiciel englobant des méthodes natives, des appels OS ou COM ... Souvent, les constantes sont copiées directement à partir d'un fichier d'en-tête d'erreur sans contexte supplémentaire, sans valeurs répétées et sans énumération.
Un script qui s'exécute toutes les heures pour réentraîner mes filtres anti-spam en fonction de deux dossiers IMAP dans lesquels span et ham sont placés.
#!/bin/sh
FNDIR="train-as-spam"
FPDIR="train-as-ham"
for dir in /home/*/.maildir
do
cd "${dir}"
USER=`stat -c %U .`
SRCDIR="${dir}/.${FNDIR}"
if [ ! -d ${SRCDIR} ]; then
echo no "${SRCDIR}" directory
else
cd "${SRCDIR}/cur"
ls -tr | while read file
do
if grep -q "^X-DSPAM" "${file}"; then
SOURCE="error"
else
SOURCE="corpus"
fi
dspam --user "${USER}" --class=spam --source="${SOURCE}" --deliver=innocent,spam --stdout < "${file}" > "../tmp/${file}"
mv "../tmp/${file}" "${dir}/new/${file%%:*}" && rm "${file}"
done
fi
SRCDIR="${dir}/.${FPDIR}"
if [ ! -d ${SRCDIR} ]; then
echo no "${SRCDIR}" directory
else
cd "${SRCDIR}/cur"
ls -tr | while read file
do
if grep -q "^X-DSPAM" "${file}"; then
SOURCE="error"
else
SOURCE="corpus"
fi
dspam --user "${USER}" --class=innocent --source="${SOURCE}" --deliver=innocent,spam --stdout < "${file}" > "../tmp/${file}"
mv "../tmp/${file}" "${dir}/new/${file%%:*}" && rm "${file}"
done
fi
done
Le plus utile? Mais il y en a tellement ...
ts.cmd contient les éléments suivants, qui me permettent de me connecter correctement à la session de console d'une autre machine via RDP, que je sois ou non sous Vista SP1.
@Écho off
ver | trouver "6.0.6001"
si ERRORLEVEL 0 si pas errorlevel 1 (set TSCONS = admin) SINON set TSCONS = console
commande echo émise: mstsc /% TSCONS%/v% 1
démarrer mstsc /% TSCONS%/v% 1
(Désolé pour le formatage étrange, apparemment vous ne pouvez pas avoir plus d'un échantillon de code par réponse?)
À partir d'une invite de commande, je vais chercher l'emplacement de mon fichier de solution VS, puis je veux l'ouvrir, mais je suis trop paresseux pour taper blah.sln et appuyer sur Entrée. Alors j'ai écrit sln.cmd:
@echo off
if not exist *.sln goto csproj
for %%f in (*.sln) do start /max %%f
goto end
:csproj
for %%f in (*.csproj) do start /max %%f
goto end
:end
Donc, je viens de taper sln et appuyez sur Entrée et il ouvre le fichier de solution, le cas échéant, dans le répertoire en cours. J'emballe des choses comme pushd et popd dans pd.cmd et pop.cmd.
J'utilise procmail pour trier mes emails entrants dans différents dossiers. Comme je ne parviens pas à me rappeler la syntaxe procmailrc, j’utilise m4 en tant que pré-processeur. Voici comment mon procmailrc commence (ce n'est pas encore le script):
divert(-1)
changequote(<<, >>)
define(mailinglistrule,
<<:0:
* $2
Lists/$1
>>)
define(listdt, <<mailinglistrule($1,^Delivered-To:.*$2)>>)
define(listid, <<mailinglistrule($1,^List-Id:.*<$2>)>>)
divert# Generated from .procmailrc.m4 -- DO NOT EDIT
Ceci définit deux macros pour les listes de diffusion, par exemple. listdt (foo, [email protected]) s'étend à
:0:
* ^Delivered-To:.*[email protected]
Lists/foo
cela signifie que les e-mails avec un en-tête Delivered-To contenant [email protected] doivent être placés dans le dossier Lists/foo. Il organise également le fichier traité pour qu'il commence par un commentaire m'avertissant de ne pas l'éditer directement.
Maintenant, franchement, m4 me fait peur: que se passe-t-il si je redéfinis une macro par inadvertance et que procmail commence à supprimer tous mes courriels, ou quelque chose du genre? C'est pourquoi j'ai un script, que j'appelle update-procmailrc, qui me montre au format diff comment mon procmailrc va changer. Si le changement ne fait que quelques lignes et ressemble à peu près à ce que je souhaitais, je peux l’approuver avec plaisir, mais s’il ya d’énormes changements dans le fichier, je dois regarder mes modifications plus attentivement.
#! /bin/sh
PROCMAILRC=.procmailrc
TMPNAM=.procmailrc.tmp.$$
cd $HOME
umask 077
trap "rm -f $TMPNAM" 0
m4 < .procmailrc.m4 > $TMPNAM
diff -u $PROCMAILRC $TMPNAM
echo -n 'Is this acceptable? (y/N) '
read accept
if [ -z "$accept" ]; then
accept=n
fi
if [ $accept = 'y' -o $accept = 'Y' ]; then
mv -f $TMPNAM $PROCMAILRC && \
chmod 400 $PROCMAILRC && \
echo "Created new $PROCMAILRC"
if [ "$?" -ne 0 ]; then
echo "*** FAILED creating $PROCMAILRC"
fi
else
echo "Didn't update $PROCMAILRC"
fi
Le script n'a pas encore empêché les désastres liés au courrier électronique, mais il m'a rendu moins soucieux de changer de procmailrc.
J'ai écrit un script de formatage de fichiers source C qui indente automatiquement le code en utilisant une combinaison appropriée de caractères de tabulation et d'espace, de sorte que le fichier s'affiche correctement, quel que soit le paramètre de tabulation défini dans votre éditeur.
Le code source est ici .
Un script qui lit un fichier de configuration dans le répertoire en cours, se connecte à un compte FTP et télécharge tous les fichiers modifiés depuis la dernière exécution. Très pratique pour les clients qui utilisent un hébergement partagé, FTP est ma seule option pour l’accès aux fichiers.
Je suppose que cela dépend de la façon dont vous définissez utile, mais mon petit script préféré est une variante du programme * nix fortune
. Voir ci-dessous et vous aurez une idée de ce que cela fait:
telemachus ~ $ haiku
January--
in other provinces,
plums blooming.
Issa
Ça ne sert à rien, mais un haïku de Nice va très loin. (J'aime la façon dont le coloriseur a décidé d'interpréter le poème.) (Edit: Si je dois vraiment être utile, je dirais un script qui permet à un utilisateur de saisir un code postal américain et d'obtenir la météo actuelle et 0-3 jours de prévisions de Google.)
Pas chaque jour, mais j’ai utilisé un script XSLT pour créer mes invitations de mariage (un fichier Pages pour les insertions sur les cartes d’invitation et un fichier HTML pour les étiquettes d’adresse).
Une fonction simple autour de Shell. Juste quand je suis trop paresseux pour penser à ce que j'essaie de faire.
Vraiment utile lorsque je navigue dans un répertoire aléatoire et que je dois passer de ls, cd à moins constamment.
en() {
if [[ -z $1 ]] ; then
ls '.'
Elif [[ -d $1 ]] ; then
cd $1
Elif [[ -f $1 ]] ; then
less <$1
fi
}
J'ai écrit un outil d'extraction de fichier à utiliser sous Linux, capable d'extraire environ 20 formats de fichiers différents et utilisant le contenu du fichier, pas le nom du fichier.
Cet outil est devenu très populaire. J'ai un flux régulier de personnes qui le téléchargent depuis mon blog. Obtenez-le ici:
En tant que tâche planifiée, copier tous les fichiers modifiés/nouveaux à partir du lecteur entier d: sauvegarder le lecteur g :, et enregistrer les fichiers copiés. Cela m'aide aussi à garder une trace de ce que j'ai fait quand.
justdate est un petit programme pour imprimer la date et l'heure à l'écran
g:
cd\drive_d
ré:
cd \
tapez g:\backup_d.log >> g:\logs\backup_d.log
echo =======================================> g:\backup_d.log
d:\mu\bmutil\justdate >> g:\backup_d.log
xcopy/s/d/y/c . g:\lecteur_d >> g:\backup_d.log
Un simple script Python) qui convertit les fins de ligne d'Unix en Windows que je me suis retrouvé coincé dans mon répertoire system32. des types de fichiers texte connus en fins de ligne Windows, et vous pouvez spécifier les fichiers à convertir, ou tous les fichiers, pour une liste de caractères génériques.
J'utilise un programme DOS qui affiche une erreur s'il est passé une certaine date. Je viens de regarder le fichier de commandes qu'il utilisait pour démarrer et je l'ai modifié pour qu'il change d'abord la date en 2000, puis lance le programme. À la sortie du programme, la date a été ramenée à ce qu'elle était avant la modification.
Un backup.sh similaire pour chaque projet, contenant uniquement le fichier source et gzips, le déplace dans un répertoire d'images instantanées et le marque avec timestamp: project-mmddyy-hhmmss. Utile pour coder entre commits.
Dans un passé lointain, j'ai décidé de placer tous les fichiers du répertoire public_html de mon hôte Web dans un référentiel Subversion. Puis j'ai écrit un script qui:
rsync
pour télécharger tous les fichiers modifiés du disque RAM) vers mon fournisseur d'hébergement. J'utilise une paire de clés publique/privée pour éviter de saisir mes informations de connexion à chaque fois.Ainsi, le transfert de mises à jour du référentiel vers le serveur est littéralement une opération "en une touche".
Ce qui est le plus satisfaisant à propos du script, c’est qu’au départ, c’était davantage un exercice de scriptage de shell qu’un grand projet. Cependant, cela m'a probablement épargné d'innombrables heures de travail et rend la possibilité de mettre à jour un site Web presque sans stress, peut-être plus que tout autre logiciel sur mon ordinateur.
Un script python) qui effectue une marche de fichiers et affiche mon arborescence de répertoires triée par utilisation du disque.
J'avais un script de contrôle de version qui prenait un répertoire en argument et copiait tous les fichiers de manière récursive dans ../nom/Date/Heure /
Évidemment, c’était une mauvaise façon de faire les choses, mais c’était pratique avant d’installer un vrai paquet de contrôle de version.
Pour ceux d’entre nous qui ne se souviennent pas où nous sommes sur Unix, ou quel SID nous utilisons.
Ajoutez ceci dans votre .profile.
<br>function CD
<br>{
<br> unalias cd
<br> command cd "$@" && PS1="\${Oracle_SID}:$(hostname):$PWD> "
<br> alias cd=CD
<br>}
<br>
alias cd=CD
Appelé assignIisSite_ToAppPool.js
Vraiment utile lorsque vous voulez vous assurer que certaines ressources sont correctement mappées.
:)
SetAppPool("W3SVC/1059997624/Root", "MyAppPool");
function SetAppPool(webId, appPoolName)
{
var providerObj=GetObject("winmgmts:/root/MicrosoftIISv2");
var vdirObj=providerObj.get("IIsWebVirtualDirSetting='" + webId + "'");
vdirObj.AppPoolId=appPoolName;
vdirObj.Put_();
}
Un script qui permet de graper facilement les résultats ps:
#!/usr/bin/php -f <?php $process = $argv[1]; echo Shell_exec("ps -ef | grep $process | grep -v grep"); exit(0);
Parfois, j'oublie quels sont les fichiers les plus récents que je viens de créer dans un répertoire, mais une commande ls n'affichera que tous les fichiers du répertoire. Je veux juste quelques fichiers les plus récents, donc je les mets dans mon .cshrc
ls -l -t | awk 'NR<15{print $0}'
(En fait, il se trouve dans un fichier appelé lt et dans le fichier .cshrc, il est défini avec: alias lt '~/lt')
Alors maintenant, il ne me montrera que quelques fichiers.
Une boîte d'alerte, sur une minuterie aléatoire, garantie de faire apparaître au moins une fois par heure pour me rappeler de faire quelques tractions.
Je l'ai utilisé quand j'étais dans l'armée.
J'ai également écrit des règles d'architecture ( http://architecturerules.org ) pour moi et pour toute autre personne.
A écrit un petit script bash qui en savait juste assez sur les polices pour parcourir environ 10 000 polices et rechercher certains mots clés, malgré leurs noms de fichiers inutiles, mais ne renvoyant pas beaucoup de faux positifs. J'ai mis un certain temps à courir, environ une minute sur le minuscule iMac, mais cela m'a probablement fait gagner 50 heures au cours des dernières années.
copy con c.bat
c:
cd\
cls
^Z
Sous WinXP, je ne semble jamais avoir le temps de lancer une défragmentation et d’attendre qu’elle se termine. J'ai donc écrit mon propre script pour lancer le defrag.exe intégré de XP et l'ai programmé pour s'exécuter sans à-coups. Les résultats sont enregistrés dans un fichier journal dans C:\Temp pour une révision ultérieure.
@echo off
GOTO :MAIN
###########################################################
#
# Reason:
# This script runs the defrag utility.
#
# Suggestion:
# Schedule this script to run daily (via schtasks)
#
# Example:
# SCHTASKS /Create /SC DAILY /ST 03:00:00
# /TR \"C:\path\to\DAILY_DEFRAG.BAT" /TN "Daily Defrag of C Drive\"
#
# Example:
# AT 03:00 /every:Su,M,T,W,Th,F,Sa C:\path\to\DAILY_DEFRAG.BAT
#
# Required OS:
# Windows XP or Windows Server 2003
#
# Required files:
# DEFRAG.EXE
#
#
###########################################################
:MAIN
:: Output a listing of scheduled tasks
SCHTASKS /QUERY /V > C:\temp\schtasks.out
:: *****************************************************
:: * SITE SPECIFIC Program Parameters *
:: *****************************************************
:: * Drive to defrag
SET TARGET=C:
:: * Log file
SET LOGFILE=C:\temp\defrag.log
:: *****************************************************
:: * No editable parameters below this line *
:: *****************************************************
SETLOCAL
:: Announce intentions
echo.
echo Beginning defragmentation of disk %TARGET%
echo ----------------------------------------------
echo.
for /f "tokens=1 delims=_" %%a in ('date /t') do set NOW=%%a
for /f "tokens=1 delims=_" %%a in ('time /t') do set NOW=%NOW% %%a
echo Start time: %NOW%
:: Run the defrag utility
C:\WINNT\SYSTEM32\defrag.exe %TARGET% -f -v > %LOGFILE%
echo.
for /f "tokens=1 delims=_" %%a in ('date /t') do set NOW=%%a
for /f "tokens=1 delims=_" %%a in ('time /t') do set NOW=%NOW% %%a
echo End time: %NOW%
echo.
echo ----------------------------------------------
echo Defrag complete.
echo.
:END
J'ai écrit un simple script Ruby pour aider ma femme et moi lorsque nous examinions les noms de notre premier enfant. Il générait toutes les combinaisons de noms et vérifiait les initiales par rapport à une liste noire d'initiales que je voulais éviter, Cela semblait être une bonne chose à faire pour un père ringard et s’est en fait avéré très utile et utile.
En dehors de cela, j’ai écrit quelques Python qui servent de bots IRC que j’utilise tous les jours. On enregistre les URL, via la correspondance d’expressions régulières, to delicious . Un autre sert d’interface simple IRC Twitter ), me permettant de consulter mon flux et de publier des mises à jour.
J'ai écrit un travail cron pour récupérer l'adresse IP du routeur de mon père et le transférer vers un emplacement sécurisé. Ainsi, lorsqu'il avait besoin d'aide, je pouvais installer un bureau à distance et réparer son ordinateur.
Cela conserve 20 jours de sauvegardes de diff sans utiliser beaucoup d'espace. Utilise des liens pour copier et des copies rsync si nécessaire
#!/bin/bash
BACKUPDIR=/media/proxy/store/backups/
[ ! -d $BACKUPDIR ] && { echo "BACKUP DIRECTORY NOT AVAILABLE!"; exit; }
dobackup() {
SDIR=$2
PARENTDIR=$1
echo "BACKING UP $PARENTDIR/$SDIR to $BACKUPDIR"
bnum=20
count=$bnum
[ -d ${BACKUPDIR}${SDIR}.$bnum ] && { mv ${BACKUPDIR}${SDIR}.$bnum ${BACKUPDIR}${SDIR}.tmp; }
until [ $count -eq 1 ]; do
let lastdir=$count-1
[ -d ${BACKUPDIR}${SDIR}.$lastdir ] && { mv ${BACKUPDIR}${SDIR}.$lastdir ${BACKUPDIR}${SDIR}.$count; }
let count-=1
done
cp -al ${BACKUPDIR}${SDIR}.0 ${BACKUPDIR}${SDIR}.1
rsync -a --delete --bwlimit=2000 $PARENTDIR/$SDIR ${BACKUPDIR}${SDIR}.0
}
for backup in $(cat /sbin/backup.directories); do
PDIR=$(echo $backup | awk -F '::' {'print$1'})
DIR=$(echo $backup | awk -F '::' {'print$2'})
dobackup $PDIR $DIR
done
exit;
cat /sbin/backup.directories
/media/warehouse::Archive
/media/warehouse::concept
#!/usr/bin/Perl
use strict;
use utf8;
use Encode;
use File::Find;
binmode STDOUT, ':utf8';
sub orderly {
my ($x, $y) = @_{$a, $b};
if (my $z = $x <=> $y) {return $z}
$x = length $a;
$y = length $b;
my $z = $x < $y ? $x : $y;
if (substr($a, 0, $z) eq substr($b, 0, $z)) {
return $y <=> $x;
}
else {
return $a cmp $b;
}
}
my %conf = map +($_ => 0), split //, 'acsxL';
sub Stat {$conf{L} ? lstat : stat}
my @dirs = ();
while (defined ($_ = shift)) {
if ($_ eq "--") {Push @dirs, @ARGV; last}
elsif (/^-(.*)$/s) {
for (split //, $1) {
if (!exists $conf{$_} or $conf{$_} = 1 and $conf{a} and $conf{s}) {
print STDERR "$0 [-a] [-c] [-s] [-x] [-L] [--] ...\n";
exit 1;
}
}
}
else {Push @dirs, $_}
}
s/\/*$//s for @dirs; # */ SO has crappy syntax highlighting
@dirs = qw(.) unless @dirs;
my %spec = (follow => $conf{L}, no_chdir => 1);
if ($conf{a}) {
$spec{wanted} = sub {
Stat;
my $s = -f _ ? -s _ : 0;
decode(utf8 => $File::Find::name) =~ /^\Q$dirs[0]\E\/?(.*)$/s;
my @a = split /\//, $1;
for (unshift @a, $dirs[0]; @a; pop @a) {
$_{join "/", @a} += $s;
}
};
}
elsif ($conf{s}) {
$spec{wanted} = sub {
Stat;
$_{$dirs[0]} += -f _ ? -s _ : 0;
};
}
else {
$spec{wanted} = sub {
Stat;
my $s = -f _ ? -s _ : 0;
decode(utf8 => $File::Find::name) =~ /^\Q$dirs[0]\E\/?(.*)$/s;
my @a = split /\//, $1;
! -d _ and pop @a;
for (unshift @a, $dirs[0]; @a; pop @a) {
$_{join "/", @a} += $s;
}
};
}
if ($conf{x}) {
$spec{preprocess} = sub {
my $dev = (Stat $File::Find::dir)[0];
grep {$dev == (Stat "$File::Find::dir/$_")[0]} @_;
};
}
while (@dirs) {
find(\%spec, $dirs[0] eq "" ? "/" : $dirs[0]);
$_{""} += $_{$dirs[0]} if $conf{c};
shift @dirs;
}
$_{$_} < 1024 ** 1 ? printf "%s «%-6.6sB» %s\n", $_{$_}, sprintf("%6.6f", "$_{$_}" / 1024 ** 0), $_ :
$_{$_} < 1024 ** 2 ? printf "%s «%-6.6sK» %s\n", $_{$_}, sprintf("%6.6f", "$_{$_}" / 1024 ** 1), $_ :
$_{$_} < 1024 ** 3 ? printf "%s «%-6.6sM» %s\n", $_{$_}, sprintf("%6.6f", "$_{$_}" / 1024 ** 2), $_ :
$_{$_} < 1024 ** 4 ? printf "%s «%-6.6sG» %s\n", $_{$_}, sprintf("%6.6f", "$_{$_}" / 1024 ** 3), $_ :
$_{$_} < 1024 ** 5 ? printf "%s «%-6.6sT» %s\n", $_{$_}, sprintf("%6.6f", "$_{$_}" / 1024 ** 4), $_ :
$_{$_} < 1024 ** 6 ? printf "%s «%-6.6sP» %s\n", $_{$_}, sprintf("%6.6f", "$_{$_}" / 1024 ** 5), $_ :
$_{$_} < 1024 ** 7 ? printf "%s «%-6.6sE» %s\n", $_{$_}, sprintf("%6.6f", "$_{$_}" / 1024 ** 6), $_ :
$_{$_} < 1024 ** 8 ? printf "%s «%-6.6sZ» %s\n", $_{$_}, sprintf("%6.6f", "$_{$_}" / 1024 ** 7), $_ :
printf "%s «%-6.6sY» %s\n", $_{$_}, sprintf("%6.6f", "$_{$_}" / 1024 ** 8), $_
for grep {$_{$_} > 0} sort orderly keys %_;
Je le sauve dans ~/bin/dush
, Il agit comme une sorte de hybride du -h
/du | sort -n
: Sort et donne toutes les tailles lisibles par l'homme. Très utile pour trouver ce qui prend de l’espace disque.
Dans le même esprit,
#!/usr/bin/Perl
$t = 1;
%p = map {$_ => ($t *= 1024)} qw(K M G T P E Z Y);
$t = 4707319808;
if (@ARGV) {
if (($_ = shift) =~ /^-*dvd/i) {$t = 4707319808}
elsif (/^-*cd[^w]*$/i) {$t = 737280000}
elsif (/^-*cd/i) {$t = 681984000}
elsif (/^-*([\d.]+)([kmgtpezy])/i) {$t = $1 * ($p{"\U$2"} || 1)}
elsif (/^-*([\d.]+)/) {$t = $1}
else {unshift @ARGV, $_}
}
($q, $r, $s) = (0, ($ENV{COLUMNS} || 80) - 13, $t);
while (<>) {
chomp, stat;
unless (-e _) {
print STDERR "$_ does not exist\n";
next;
}
if (($s += -s _) > $t) {
$s && $s < $t && printf "-%7s %s\n",
sprintf("%2.3f%%", 100 * ($t - $s) / $t), $t - $s;
printf "-----------%d%*s\n", ++$q, $r, "-" x $r;
$s = -s _;
}
printf "%8s %s\n",
sprintf("%3.3f%%", $s * 100 / $t),
/.{4}(.{$r})$/s ? "...$1" : $_;
}
$s && $s < $t && printf "-%7s %s\n",
sprintf("%2.3f%%", 100 * ($t - $s) / $t), $t - $s;
Je sauve ceci en tant que ~/bin/fit
. Lorsque j'archive un groupe de fichiers, je lance ls | fit
Ou ls | fit -cdrw
Pour déterminer s'il est compatible avec les DVD/CD/CDRW et où les séparer s'ils ne le sont pas. t.
J'utilise souvent une macro MS Word qui prend un fichier de code source, le formate en deux colonnes de type à espacement fixe sur une page paysage, numérote les lignes et ajoute des informations sur l'en-tête et le pied de page de l'entreprise, telles que le nom du fichier, la date d'impression, le numéro de page et DECLARATION DE confidentialite.
L'impression des deux côtés de la page utilise environ 1/4 du papier comme commande équivalente lpr
. (Est-ce que quelqu'un utilise lpr
plus ???)
Eh bien, en 2005, j’utilisais Gentoo Linux et j’utilisais beaucoup un petit programme appelé genlop pour me montrer l’histoire de ce que j’étais sorti sur ma boîte gentoo. Bien pour simplifier mon travail, j’ai écrit non pas un petit script python mais un gros script, mais à ce moment-là, j’ai commencé à utiliser python:
#!/usr/bin/python
##############################################
# Gentoo emerge status #
# This script requires genlop, #
# you can install it using `emerge genlop`. #
# Milot Shala <[email protected]> #
##############################################
import sys
import os
import time
#colors
color={}
color["r"]="\x1b[31;01m"
color["g"]="\x1b[32;01m"
color["b"]="\x1b[34;01m"
color["0"]="\x1b[0m"
def r(txt):
return color["r"]+txt+color["0"]
def g(txt):
return color["g"]+txt+color["0"]
def b(txt):
return color["b"]+txt+color["0"]
# View Options
def view_opt():
print
print
print g("full-info - View full information for emerged package")
print g("cur - View current emerge")
print g("hist - View history of emerged packages by day")
print g("hist-all - View full list of history of emerged packages")
print g("rsync - View rsync history")
print g("time - View time for compiling a package")
print g("time-unmerged - View time of unmerged packages")
print
command = raw_input(r("Press Enter to return to main "))
if command == '':
c()
program()
else:
c()
program()
# system command 'clear'
def c():
os.system('clear')
# Base program
def program():
c()
print g("Gentoo emerge status script")
print ("---------------------------")
print
print ("1]") + g(" Enter options")
print ("2]") + g(" View options")
print ("3]") + g(" Exit")
print
command = input("[]> ")
if command == 1:
print
print r("""First of all you must view options to know what to use, you can enter option name ( if you know any ) or type `view-opt` to view options.""")
print
time.sleep(2)
command = raw_input(b("Option name: "))
if (command == 'view-opt' or command == 'VIEW-OPT'):
view_opt()
Elif command == 'full-info':
c()
print g("Full information for a single package")
print ("-------------------------------------")
print
print b("Enter package name")
command=raw_input("> ")
c()
print g("Full information for package"), b(command)
print ("-----------------------------------")
print
pack=['genlop -i '+command]
pack_=" ".join(pack)
os.system(pack_)
print
print r("Press Enter to return to main.")
command=raw_input()
if command == '':
c()
program()
else:
c()
program()
Elif command == 'cur':
if command == 'cur':
c()
print g("Current emerge session(s)")
print ("-------------------------")
print
print b("Listing current emerge session(s)")
print
time.sleep(1)
os.system('genlop -c')
print
print r("Press Enter to return to main.")
command = raw_input()
if (command == ''):
c()
program()
else:
c()
program()
Elif command == 'hist':
if command == 'hist':
c()
print g("History of merged packages")
print ("---------------------------")
print
time.sleep(1)
print b("Enter number of how many days ago you want to see the packages")
command = raw_input("> ")
c()
print g("Packages merged "+b(command)+ g(" day(s) before"))
print ("------------------------------------")
pkg=['genlop --list --date '+command+' days ago']
pkg_=" ".join(pkg)
os.system(pkg_)
print
print r("Press Enter to return to main.")
command = raw_input()
if command == '':
c()
program()
else:
c()
program()
Elif command == 'hist-all':
c()
print g("Full history of merged individual packages")
print ("--------------------------------------")
print
print b("Do you want to view individual package?")
print r("YES/NO?")
command = raw_input("> ")
print
if (command == 'yes' or command == 'YES'):
print g("Enter package name")
command = raw_input("> ")
print
pkg=['genlop -l | grep '+command+ ' | less']
pkg_=" ".join(pkg)
os.system(pkg_)
print
print r("Press Enter to return to main")
command = raw_input()
if command == '':
c()
program()
else:
c()
program()
Elif (command == 'no' or command == 'NO'):
pkg=['genlop -l | less']
pkg_=" ".join(pkg)
os.system(pkg_)
print
print r("Press Enter to return to main")
command = raw_input()
if command == '':
c()
program()
else:
c()
program()
else:
c()
program()
Elif command == 'rsync':
print g("RSYNC updates")
print
print
print
print b("You can view rsynced time by year!")
print r("Do you want this script to do it for you? (yes/no)")
command = raw_input("> ")
if (command == 'yes' or command == 'YES'):
print
print g("Enter year i.e"), b("2005")
print
command = raw_input("> ")
rsync=['genlop -r | grep '+command+' | less']
rsync_=" ".join(rsync)
os.system(rsync_)
print
print r("Press Enter to return to main.")
c()
program()
Elif (command == 'no' or command == 'NO'):
os.system('genlop -r | less')
print
print r("Press Enter to return to main.")
command = raw_input()
if command == '':
c()
program()
else:
c()
program()
Elif command == 'time':
c()
print g("Time of package compilation")
print ("---------------------------")
print
print
print b("Enter package name")
pkg_name = raw_input("> ")
pkg=['emerge '+pkg_name+' -p | genlop -p | less']
pkg_=" ".join(pkg)
os.system(pkg_)
print
print r("Press Enter to return to main")
time.sleep(2)
command = raw_input()
if command == '':
c()
program()
else:
c()
program()
Elif command == 'time-unmerged':
c()
print g("Show when package(s) is/when is unmerged")
print ("----------------------------------------")
print
print b("Enter package name: ")
name = raw_input("> ")
pkg=['genlop -u '+name]
pkg_=" ".join(pkg)
os.system(pkg_)
print
print r("Press Enter to return to main")
time.sleep(2)
command = raw_input()
if command == '':
c()
program()
else:
c()
program()
else:
print
print r("Wrong Selection!")
time.sleep(2)
c()
program()
Elif command == 2:
view_opt()
command = raw_input(r("Press Enter to return to main "))
if command == '':
c()
program()
else:
c()
program()
Elif command == 3:
print
print b("Thank you for using this script")
print
time.sleep(1)
sys.exit()
else:
print
print r("Wrong Selection!")
time.sleep(2)
c()
program()
command = ("")
program()
J'ai écrit un petit script Shell, tapt, pour un système basé sur Debian. esp. Ubuntu. En gros, vous publiez toutes vos activités "apt-get" sur votre compte Twitter. Cela m'aide à garder la trace de ce que et quand j'ai installé/supprimé des programmes sur mon système Ubuntu. J'ai créé un nouveau compte Twitter juste pour cela et je l'ai gardé privé. Vraiment utile. Plus d'informations ici: http://www.quicktweaks.com/tapt/
J'aime la façon dont git détermine quand utiliser moins, Subversion n’ayant pas cette fonctionnalité, je souhaite donc obtenir facilement une sortie colorée dans un pager. l'alias cgrep me permet de choisir rapidement. sans elle, il m'arrive parfois d'obtenir des couleurs brutes.
De plus, lorsque je passe par le code, je n'aime pas voir certains résultats, comme les fichiers binaires .tvn ctags
grep -R sourcecodetext sourcedir | nosvn
Ci-dessous ce que j'ai dans mes fichiers de configuration
cat .bash_profile
alias nosvn="grep -v \"\.svn\|tags\|cscope\|Binary\""
alias less="less -R"
alias diff="colordiff -u"
alias cgrep="grep --color=always"
export GREP_OPTIONS='--color=auto'
bac à chat/gitdiffwrapper
#!/bin/bash
old_file=$1
tmp_file=$2
old_hex=$3
old_mode=$4
new_file=$5
new_mode=$6
colordiff -u $old_file $tmp_file
chat .gitconfig
[diff]
external = $HOME/bin/gitdiffwrapper
chat .Subversion_config | grep ^ diff-cmd
diff-cmd = /usr/bin/colordiff
J'ai un fichier de commandes qui établit une connexion VPN, puis entre une boucle infinie, en envoyant une commande ping à une machine de l'autre côté de la connexion toutes les cinq minutes afin que le serveur VPN ne perde pas la connexion en raison d'une inactivité si je ne génère pas. tout trafic sur cette connexion pendant un certain temps.
Un rakefile dans mon répertoire de téléchargements contenant des tâches qui copient des fichiers dudit répertoire dans leurs archives multimédias respectives sur des lecteurs externes. Compte tenu de ma vitesse Internet et de ma capacité de stockage, il me faudrait des heures par semaine pour copier et renommer de manière appropriée chaque support téléchargé par hellanzb (de manière tout à fait légale).
Une autre tâche très utile dans le même fichier se connecte à IMDB et récupère les listes d’épisodes/discographies de tous les supports que j’ai, puis recherche dans NewzBin des rapports susceptibles de combler les lacunes que j’ai rencontrées.
Ensemble, cela signifie que je ne dois absolument rien faire, et en échange, je me lève chaque matin avec plus de supports que je ne pourrais en consommer ce jour-là, assis sur mes disques durs externes.
Ai-je mentionné que tout cela est entièrement légal et au-dessus de la table? ré-:
Je vais probablement fusionner tout cela en une sorte de gestionnaire/lecteur multimédia en ligne de commande (alimenté par mplayer) et le publier sur GitHub lorsque j'en aurai le temps.
Meilleur scénario de la vie réelle?
Moi: (Entre dans la salle) "Patron, je veux une augmentation."
Boss: (offre une chaise derrière son bureau) "Une augmentation? S'il vous plaît, prenez mon travail!"
Encore une fois, cela peut être le pire script !
J'ai un fichier batch qui s'exécute tous les matins et qui lance un navigateur avec les onglets chargés sur tous les sites que je souhaite consulter chaque jour (Woot, Dilbert, Doonesbury, UserFriendly; utilisateurs saisonniers, scores de NY Mets et électorale-vote.com, plus quelques sites Web à visiter régulièrement pour garder les membres actifs)
Somme de contrôle Anime CRC32:
#!/usr/bin/python
import sys, re, zlib
c_null="^[[00;00m"
c_red="^[[31;01m"
c_green="^[[32;01m"
def crc_checksum(filename):
filedata = open(filename, "rb").read()
sum = zlib.crc32(filedata)
if sum < 0:
sum &= 16**8-1
return "%.8X" %(sum)
for file in sys.argv[1:]:
sum = crc_checksum(file)
try:
dest_sum = re.split('[\[\]]', file)[-2]
if sum == dest_sum:
c_in = c_green
else:
c_in = c_red
sfile = file.split(dest_sum)
print "%s%s%s %s%s%s%s%s" % (c_in, sum, c_null, sfile[0], c_in, dest_sum, c_null, sfile[1])
except IndexError:
print "%s %s" %(sum, file)
[email protected] et [email protected] => modifiez le fichier hosts, pour passer par LAN ou WAN adresses.
Eh bien, un script AutoHotkey qui rend ma vie accessible uniquement à un clavier:
Ce script de clavier fait de moi un si heureux campeur; et c’est en fait la principale raison pour laquelle j’utilise toujours Windows au lieu de Linux comme plate-forme principale, car autohotkey ne fonctionne que sous Windows.
Je suppose que je devrais inclure ma propre réponse à cette question, par souci d'achèvement.
J'ai écrit un script simple qui prend en compte les dépenses de deux personnes vivant ensemble et calcule quelle personne doit l'autre à la fin du mois afin que chaque personne dépense de manière égale. Je prévois de l'étendre pour stocker les catégories de chaque dépense et les stocker dans une base de données. Bien sûr, je pourrais simplement utiliser un logiciel existant ... mais où est le plaisir?
Pas très complexe, bien sûr, mais pour ce qui est des scripts non liés au travail que j'utilise beaucoup chez moi, celui-ci est le leader actuel.
alias snoot='find . ! -path "*/.svn*" -print0 | xargs -0 egrep '
J'ai écrit un programme python) pour calculer les dépenses partagées de mon appartement et générer une petite grille ordonnée, avec le colocataire comme colonne et la catégorie de dépense comme rangée, ainsi que le montant d'argent que chaque colocataire devait louer, après ajustement pour sa contribution aux dépenses partagées, que nous partagions depuis un moment, mais en additionnant les totaux bruts à la fin du mois, il me fallait un contrôle plus granulaire, avec un maximum de huit frappes par élément, C’est bien mieux qu’Excel. J'étais en quelque sorte dans une quête désespérée pour mettre fin à la tendance mensuelle d’un colocataire dépensant 25% de son budget en boissons ...