2016-05-04 9 views
3

ihave einer umask 0002 umask -S Verwendung kehrt u=rwx,g=rwx,o=rx.Suchen von Dateien und Verzeichnisse mit unterschiedlichen umask

Wie finde ich alle Dateien und Verzeichnisse, die jetzt festgelegten Rechte up hat accordin zu maskieren?

Die Verzeichnisse geht 777 - mask und Dateien 666 - mask Wenn ich so etwas tun

find . ! -perm $(umask -S) 

es werden alle Dateien/Verzeichnisse finden, die Rechte an u = rwx nicht festgelegt haben, g = rwx, o = rx (777 - 002 gibt es Rechte, aber 666 - 002 sind unterschiedliche Rechte), das ist gut für Verzeichnisse, aber nicht für Dateien.

Wie finde ich Dateien, die andere Rechte als die aktuelle Umask haben?

Beispiel

touch one 
ls -l 
-rw-rw-r-- 1 trolkura trolkura 0 kvě 4 09:01 one 

umask ist 0002 so ergibt dies 664, aber wenn ich

find . -type f ! -perm $(umask -S) 
./one 

Ergebnis tun, ist die neu bcs es erstellte Datei ist auf der Suche nach Dateien, die nicht 775 Rechte hat (Verzeichnisrechte)

Antwort

0
find . -type f ! -perm $(echo "obase=8;$((8#666^8#$(umask)))"|bc) 

Das ist eine binäre XOR-Operation auf Oktalzahlen. Das Dezimal-Ergebnis wird wieder in Oktal umgewandelt, da -perm oktale Berechtigungen akzeptiert.

+0

dieses Ergebnis in 436 nicht 664, wie es sollte – Darlyn

+0

@trolkura Update vergessen gemacht, Dezimalergebnis zurückzuverwandeln. –

0

Der schlimmste Fall Lösung wäre, Fälle zu setzen je nach umask ...

Wenn Ihr umask u=rwx,g=rwx,o=rx die Dateien finden können, die das Übel 666 wie dieses:

find . -type f ! -perm u=rw,g=rw,o=r 

Wenn Ihr umask u=rwx,g=rx,o=rx, dann verwenden Sie eine andere Zeichenfolge ...

find . -type f ! -perm u=rw,g=r,o=r 

... nicht stolz auf diese ein.

1

Hier ist meine Version:

m=`umask` 
fperm=`printf '0%o' $((0666 & ~$m))` 
dperm=`printf '0%o' $((0777 & ~$m))` 

find -type f -perm $fperm -o -type d -perm $dperm