• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

chmod getrennt für dateien und vrezeichnisse ? (erledigt)

ShockWave

Newbie
Ich suche eine Möglichkeit rekursiv in die Rechte für Verzeichnisse und Dateien getrennt zu ändern. Leider konnte ich nix finden :( Gibt es dafür einen extra Befehl ?

Habe im Netz dieses script gefunden aber das will net.

1 #!/bin/sh
2 # recursive chmod with arguments for files and directories
3
4 # save internal field separator
5 IFS_save=$IFS
6 # set internal field separator, thx to matthias
7 IFS=$'
8 '
9
10 # read arguments
11 chmodf=$1 # chmod for files
12 chmodd=$2 # chmod for directories
13 dir=$3 # start directory
14
15 # test for arguments $1 and $2
16 if [ -z "$chmodf" -o -z "$chmodd" ]
17 then
18 echo "Usage: `basename $0` fff ddd [pfad]"
19 echo " fff ... chmod argument for files (644)"
20 echo " ddd ... chmod argument for direcories (755)"
21 echo " pfad ... nothing for current directory"
22 exit
23 fi
24
25 # if no start directory, use current directory
26 if [ -z "$dir" ]
27 then
28 dir="."
29 fi
30 #"\$x='$x'"
31 # find backwards all files and directories
32 for file in `find "$dir" -name "*"`
33 do
34 # debug print
35 #echo "$file"
36
37 if [ -d $file ] # directory
38 then
39 # chmod
40 chmod $chmodd $file
41 elif [ -e $file ] # file
42 then
43 # chmod
44 chmod $chmodf $file
45 else
46 #echo "error: $file"
47 fi
48 done
49
50 #set back internal field separator
51 IFS=$IFS_sav

Bekomme immer fehlermdelung "line 46: syntax error near unexpectet token ´fi'

Kann mir jemand weiter helfen ??

THX ShockWave
 

TeXpert

Guru
oha, bevor ich das jetzt alle lese ;) hacke ich Dir da selber was zusammen ... (ok, ohne große Plausibilitätstests... ob Verzeichnis existiert und so.. aber dann passiert halt nix )
Code:
#!/bin/sh

if [ ! $# -eq 3 ]
then 
  echo "falsche Parameter"
  echo "$(basename $0) BASISVERZEICHIS DATEIRECHTE VERZEICHNISRECHTE"
  exit 1
fi

BASEDIR=$1
CHMODF=$2
CHMODD=$3

echo "Ändere Verzeichnisse zu $CHMODD"
find $BASEDIR -type d -exec chmod $CHMODD {} \;
echo "Ändere Dateien zu $CHMODF"
find $BASEDIR -type f -exec chmod $CHMODF {} \;

echo "thats it"

aufruf mit
Code:
$foo pfad daterechte verzeichnisrechte

die Rechte können in jeder chmod-genehmen Version eingegeben werden, d.h. Oktal (z.B. 755) oder mit Zeichen (g+w)
 
Oben