Hallo,
On Sat, 16 Nov 2002, Thorsten Haude wrote:
Probier mal aus, wie das auf Deinem System aussieht:
find / -type f -exec file {} \; 2>/dev/null | grep 'shell script text' | grep -Ev '(~|bck):' | awk -F: '{print $1}' | awk -F/ '{print $2}' | grep '\.' | grep -v '\.sh'
(Was für ein Ungetüm. David könnte das bestimmt mit 30 Zeichen.)
Ma kuckn ;)
Also, auf jeden Fall kann man den ganze Kram ab dem ersten 'grep'
zusammenfassen... Wenn man schon ein awk anwirft... ;)
Erstmal: Was soll das 'bck' sein? [1]
Aaaalso ;)
Zurueck zum Thema...
Setzen wir mal ne Pipe voraus, aus der folgendes Zeilenweise
eintrudelt (z.B. via obigem find oder z.B. einem locate | xargs file
o.ae.):
<Dateiname>:
Jetzt wollen wir was?
1: | grep 'shell script text'
### nur zeilen in denen 'shell script text' vorkommt
2: | grep -Ev '(~|bck):'
### wo der Dateiname aber weder '~' noch 'bck' am Ende enthaelt
3: | awk -F: '{print $1}'
### den Dateinamen dieser Dateien
4: | awk -F/ '{print $2}'
### hae? Was soll das bringen? Damit bekommst du ne Liste wie:
### /, /home /usr etc.... Das ist also Schwachfug... Wolltest du
### sowas wie 'basename'?
5: | grep '\.'
### je nun, jetzt filtert er aus den Verzeichnissen direkt unter /
### noch welche aus, die einen '.' enthalten... (vermutlich waren
### Dateinamen(!) gemeint, die einen '.' enthalten
6: | grep -v '\.sh'
### ah, und davon dann die, die _nicht auf '.sh' enden...
Ok, mal angenommen, ich habe die Intention des obigen Gewuerges
richtig verstanden, dann wuerde ich sowas verwenden:
====
awk -F':' '
!/~|bak|bck/ && /:.*shell script text/ && /.*\/[^/]*\.[^/]*/ && !/\.sh/ {
print $1;
}'
====
*muahahaha*
Sind 29 Zeichen!!!
*ROTFL*
Und dabei ist die 2te Teil-Bedingung noch unnoetig explizit, AFAIR
sollte '/:.*shell script/' reichen, womit wir bei 25 Zeichen waeren ;)
Wichtiger als die Zeichenzahl ist aber: Ich verwende nur ein(!) awk
anstelle von 4 'grep's und 2 'awk's...
Auch das mit dem find laesst sich verbessern:
,----[ /tmp/test/find_scripts.sh ]
| #! /bin/bash
| DIRS="$PATH:~/sbin:/usr/local/sbin:/sbin:/usr/sbin:/var/lib/texmf/web2c"
| ## DIRS ggfs. erweitern...
| (
| OIFS="$IFS"; IFS=":"
| for dir in $DIRS
| do
| find $dir -exec file {} \;
| done
| IFS="$OIFS"
| ) | awk -F':' '
| !/~|bak|bck/ && /:.*shell script text/ \
| && /.*\/[^/]*\.[^/]*/ && !/\.sh/ {
| print $1;
| }
| '
`----
Oehm, ich hab mal die REs so gestaltet, dass sie sich leicht auf die
von dir verwendeten Einzelprozesse/-schritte zurueckfuehren lassen.
Ich glaube, das laesst sich auch noch "verkuerzen", evtl. sogar auf
eine einzige RE... Aber dafuer bin ich jetzt zu muede ;)
Achso, ja, das findet bei mir (als user, neben einigen "Permission
denied"s) nix, das irgendwie nach "Script-Endung" aussieht, nur z.B.
ein '.lxdialog', '.inst', '.wrapper' und '.local' und aehnliches.
-dnh
[1] Soll das eine Dateiendung sein, die fuer ein Backup steht? also,
auf meinem System findest du das nicht, hoechstens mal ein '.bak'
;)
$ locate .bck | wc -l
4
$ locate .bak | wc -l
3521
$ locate / | wc -l
1251316
(die .bak stammen v.a von Webseiten und/oder ner Win-Partition).
fuer diesen Zweck:
$ locate .bck | xargs file | sed 's/.*: *//' | sort -u
C program text
raw G3 data, byte-padded
Ups! das erstere ist tatsaechlich ein(!) Backup:
/Chromium-0.9/support/openal/linux/config.h.bck
die restlichen 3 sind:
/tex-archive/tools/zip/info-zip/VMS/unz532x-vms-(axp|decc|vaxc)-obj.bck
--
77: Internet
Arbeitsbeschaffungsmaßnahme für Rechtsanwälte (Frank Klemm)