Ich bin etwas verwirrt darüber, wie Leerzeichen in Pfadnamen behandelt werden sollen, wenn sie in einer for-Schleife zurückgegeben werden.
Begründung: Ich bereinige die Berechtigungen für Ordner und Dateien, die ich von Windows kopiere. Die meisten Dateien haben -rwx------
oder -rwxr-xr-x
Berechtigungen, daher mache ich gerne " chmod -x *
" und dann " chmod u+x <folders>
", also versuche ich Folgendes:
$ alias getdirs='find . -maxdepth 1 -mindepth 1 -type d | cut -c 3-'
$ for i in $(getdirs); do chmod u+x $i; done
Das funktioniert gut, solange die Verzeichnisse kein Leerzeichen im Namen haben.
Ich habe verschiedene Permutationen versucht chmod u+x "$i"
, chmod u+x '$i'
und ähnliches , das Verhalten zu bekommen ich wollte, aber ohne Erfolg.
Wie kann ich meinen Bash-Code verbessern, der mit Ordnernamen funktioniert, die Leerzeichen enthalten?
Der Zweck davon ist, das "exec" -Bit aus einfachen Dateien (daher der chmod -x *
Teil) entfernen zu können, es dann aber in den Verzeichnissen wiederherzustellen, um den Zugriff darauf zu ermöglichen ( chmod u+x <dirname>
). Aufgrund der bisherigen Kommentare und Antworten denke ich, dass es wahrscheinlich einfacher sein wird, mit der richtigen Beschwörung "Finden" umzugehen
find
und sed
und awk
usw. auf wenige Schritte reduziert werden können, viele weniger erfahrene Shell-Bastler finden die Befehlsketten im Flowchart-Stil besser lesbar und verständlicher.