Estoy teniendo problemas para citar un nombre de archivo que se pasa finalmente a chmod
. El guión fue escrito originalmente por SSH s StrictModes
y authorized_keys
, pero tuve que ampliarlo debido a una mala UMASK
que provocó que algunos sistemas de archivos molestias. La secuencia de comandos que se encuentra debajo, y su producción de barcos cargados de:
chmod: /Users/<user>/Library/Application: No such file or directory
chmod: Support/TextMate/Managed/Bundles/HTML.tmbundle/Macros/Delete: No such file or directory
chmod: whitespace: No such file or directory
chmod: between: No such file or directory
chmod: tags.plist: No such file or directory
...
chmod: /Users/<user>/Library/Caches/com.operasoftware.Opera/Media: No such file or directory
chmod: Cache/index: No such file or directory
cut: stdin: Illegal byte sequence
...
Yo he probado un par de soluciones, pero ninguna de ellas ha ayudado. Traté de doble citando como ""$file""
, pero el problema persistió. También probé la parte de atrás de las garrapatas (que son desalentados en este caso), pero el problema persistió.
El más cercano que tengo a la realidad citando fue el disfuncionales "\"""$file""\""
. Pero, a continuación, chmod
se quejó el nombre de archivo (con comillas) no era un verdadero archivo:
$ sudo ~/fix-perms.sh
chmod: "/Users/Shared/.localized": No such file or directory
chmod: "/Users/<user>/.CFUserTextEncoding": No such file or directory
chmod: "/Users/<user>/.lesshst": No such file or directory
¿Cómo puedo citar el nombre de archivo que sale de find
que pasa en chmod
? O ¿cómo puedo obtener chmod
a tomar el nombre de archivo como un solo argumento?
$ cat ~/fix-perms.sh
#!/bin/bash
# Directories
find /Users/* -type d -exec chmod 0700 {} \;
find /Users/Shared -type d -exec chmod 0777 {} \;
# Files
for file in `find /Users/* -type f`;
do
if [ `file "$file" | cut -d":" -f 2 | grep -i -c executable` -eq 0 ];
then
`chmod 0600 "$file"`
else
`chmod 0700 "$file"`
fi
done
for user in `ls -A /Users`;
do
if [ -e "/Users/$user/.ssh/authorized_keys" ];
then
chmod 0600 "/Users/${user}/.ssh/authorized_keys"
fi
done