2010-03-22 26 views

Respuesta

31
find -type f -maxdepth 1 -writable 
+0

Emite una advertencia sobre el orden de las opciones en mi sistema. –

+0

que Linux estás usando? – matja

+1

+1 para maxdepth y tipo f, los he incluido en mi respuesta. –

3

-f pondrá a prueba para un archivo

-w pondrá a prueba si es grabable

Ejemplo:

$ for f in *; do [ -f $f ] && [ -w $f ] && echo $f; done 
+2

-1 inútil sin un ejemplo ... – lexu

+1

También inútil sin decir a qué comando se deben aplicar estas opciones. – bignose

+0

@ lexu/bignose - es una pregunta 'bash'. '-f' y' -w' son operadores de bash. Qué más necesitas ? –

4

Si se encuentra en la cáscara utilizar

find . -maxdepth 1 -type f -writable 

ver al hombre encontrar

Encontrará a obtener mejores respuestas para este tipo de pregunta sobre superuser.com o serverfault.com

Si está escribiendo código no sólo el uso de la cáscara usted puede estar interesado en el acceso (2) llamada al sistema.

Este question ya ha sido formulada en serverfault

EDIT: @ ghostdog74 preguntaron si ha quitado permisos de escritura para este archivo si esto todavía encontrar el archivo. La respuesta, no, esto solo encuentra los archivos que se pueden escribir.

[email protected] ~/temp 
$ cd temp 

[email protected] ~/temp/temp 
$ ls 

[email protected] ~/temp/temp 
$ touch newfile 

[email protected] ~/temp/temp 
$ ls -alph 
total 0 
drwxr-xr-x+ 2 dwaters Domain Users 0 Mar 22 13:27 ./ 
drwxrwxrwx+ 3 dwaters Domain Users 0 Mar 22 13:26 ../ 
-rw-r--r-- 1 dwaters Domain Users 0 Mar 22 13:27 newfile 

[email protected] ~/temp/temp 
$ find . -maxdepth 1 -type f -writable 
./newfile 

[email protected] ~/temp/temp 
$ chmod 000 newfile 

[email protected] ~/temp/temp 
$ ls -alph 
total 0 
drwxr-xr-x+ 2 dwaters Domain Users 0 Mar 22 13:27 ./ 
drwxrwxrwx+ 3 dwaters Domain Users 0 Mar 22 13:26 ../ 
---------- 1 dwaters Domain Users 0 Mar 22 13:27 newfile 

[email protected] ~/temp/temp 
$ find . -maxdepth 1 -type f -writable 

[email protected] ~/temp/temp 
+1

Veo el siguiente error con su solución: find: invalid predicate '-writable ' – vehomzzz

+0

sorry had. en el lugar incorrecto, corregido ahora, mira man find para ver cómo usar este comando –

+0

si eliminas todos los permisos de escritura de un archivo y luego usas el comando, ¿aún encuentra el archivo? Tengo curiosidad – ghostdog74

0
for var in `ls` 
do 
if [ -f $var -a -w $var ] 
then 
echo "$var having write permission"; 
else 
echo "$var not having write permission"; 
fi 
done 
+1

no uses ls con for loop para analizar nombres de archivo. también cita tus variables en la prueba if/else. – ghostdog74

3

para encontrar los archivos de escritura independientemente de propietario, grupo u otros, se puede comprobar la bandera w en la columna de permisos de archivo de ls.

ls -l | awk '$1 ~ /^.*w.*/' 

$ 1 es el primer campo, (es decir, el bloque de autorización de ls -l), la expresión regular sólo decir encontrar la letra "w" en el campo uno. eso es todo.

si quiere encontrar el permiso propietario de escritura

ls -l | awk '$1 ~ /^..w/' 

si quiere encontrar el permiso de escritura del grupo

ls -l | awk '$1 ~ /^.....w/' 

si usted quiere encontrar otros escriben permiso

ls -l | awk '$1 ~ /w.$/' 
+0

¡eso es genial! ¿Puede explicar esto? awk command pelase – vehomzzz

+0

¿Qué significa tilde? – vehomzzz

+0

la tilde es el operador de expresiones regulares de awk para "coincidencia". al igual que el operador de expresiones regulares '= ~' de Perl – ghostdog74

16

El La opción -writable encontrará los archivos que pueden ser escritos por el usuario actual.Si desea encontrar archivos que son modificables por cualquier persona (o incluso otras combinaciones), puede utilizar la opción -perm:

find -maxdepth 1 -type f -perm /222 

Esto encontrará archivos que son escritos por su propietario (sea quien sea) :

find -maxdepth 1 -type f -perm /200 

Varios personajes se pueden utilizar para controlar el significado del argumento modo:

  • / - cualquier bit de permiso
  • - - todos los bits (-222 significaría todo - usuario, grupo y otros)
  • sin prefijo - especificación exacta (222 significaría no hay permssions distintos de escritura)
+0

Esa es una solución muy elegante. ¿Cómo modifico esto para encontrar archivos que solo puede escribir el propietario? – kshenoy

+3

@kshenoy: Una forma: '-perm -u + w! -perm -g + w! -perm -o + w' –

+0

En Mac o en cualquier variante de Linux anterior, use: find -type f + perm 222 – user1959190

0
stat -c "%A->%n" *| sed -n '/^.*w.*/p' 
0

El problema con find -writable se que no es portátil y no es fácil de emular correctamente con los operadores portátiles find. Si su versión de find no lo tiene, puede utilizar touch para comprobar si el archivo se puede escribir, usando -r para asegurarse de que (casi) no modifique el archivo:

find . -type f | while read f; do touch -r "$f" "$f" && echo "File $f is writable"; done

El -r la opción para touch está en POSIX, por lo que puede considerarse portátil. Por supuesto, esto será mucho menos eficiente que find -writable.

Tenga en cuenta que se touch -r actualización ctime de cada archivo (hora de la última modificación de su meta-datos), pero rara vez se preocupa por ctime de todos modos.

+0

¿Ha intentado 'touch' en un archivo de solo lectura como root o en un archivo de su propiedad? La capacidad de actualizar una marca de tiempo no implica que el archivo sea escribible. –

+0

Si es usuario root, los archivos de solo lectura en sistemas de archivos modificables pueden escribirse, por lo que no veo el problema allí. – Idelic

+0

En redhat 4 obtengo "while: Expression Syntax". – jgritty

0

Si usted quiere encontrar todos los archivos que tengan permisos de escritura et al Apache entonces usted puede hacer esto:

sudo su www-data 
find . -writable 2>/dev/null 

Reemplazar www-data con nadie o Apache o lo que su usuario de la web es.

0

Sé que esto un hilo muy antiguo, sin embargo ...

El comando de abajo me ayudó: find . -type f -perm /+w

Usted puede utilizar -maxdepth basado en el número de niveles por debajo de directorio que desea buscar. Estoy usando Linux 2.6.18-371.4.1.el5.

Cuestiones relacionadas