Quiero identificar rápidamente todos los archivos editables en el directorio. ¿Cuál es la forma más rápida de hacerlo?Buscar todos los archivos editables en el directorio actual
Respuesta
find -type f -maxdepth 1 -writable
-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
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
Veo el siguiente error con su solución: find: invalid predicate '-writable ' – vehomzzz
sorry had. en el lugar incorrecto, corregido ahora, mira man find para ver cómo usar este comando –
si eliminas todos los permisos de escritura de un archivo y luego usas el comando, ¿aún encuentra el archivo? Tengo curiosidad – ghostdog74
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
no uses ls con for loop para analizar nombres de archivo. también cita tus variables en la prueba if/else. – ghostdog74
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.$/'
¡eso es genial! ¿Puede explicar esto? awk command pelase – vehomzzz
¿Qué significa tilde? – vehomzzz
la tilde es el operador de expresiones regulares de awk para "coincidencia". al igual que el operador de expresiones regulares '= ~' de Perl – ghostdog74
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)
Esa es una solución muy elegante. ¿Cómo modifico esto para encontrar archivos que solo puede escribir el propietario? – kshenoy
@kshenoy: Una forma: '-perm -u + w! -perm -g + w! -perm -o + w' –
En Mac o en cualquier variante de Linux anterior, use: find -type f + perm 222 – user1959190
stat -c "%A->%n" *| sed -n '/^.*w.*/p'
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.
¿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. –
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
En redhat 4 obtengo "while: Expression Syntax". – jgritty
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.
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.
- 1. Comando para buscar todos los archivos privados de vista en el directorio actual de forma recursiva
- 2. Buscar todos los archivos CSV en un directorio usando Python
- 3. CoffeeScript: compila todos los archivos .coffee en el directorio actual y en todos los subdirectorios
- 4. Copie todos los archivos en el directorio
- 5. Buscar todos los archivos bloqueados en TFS
- 6. Buscar todos los archivos en una carpeta
- 7. Rails ActiveRecord: Buscar todos los usuarios excepto el usuario actual
- 8. Python-FTP descarga todos los archivos en el directorio
- 9. ¿Qué se expande a todos los archivos en el directorio actual recursivamente?
- 10. Buscar todos los archivos htaccess en el servidor
- 11. lista de PHP todos los archivos en el directorio
- 12. Proceso por lotes todos los archivos en el directorio
- 13. gitignore todos los archivos de extensión en el directorio
- 14. Listar los archivos en un directorio del archivo JAR actual
- 15. Buscar todos los archivos en un directorio que no son directorios en sí
- 16. Listar los archivos en un directorio y todos los subdirectorios
- 17. Buscar y reemplazar texto en todos los archivos de un directorio de Linux
- 18. ¿Cómo buscar en un directorio de archivos en vim?
- 19. Cómo abrir todos los archivos .txt y .log en el directorio actual, buscar e imprimir el archivo en el que se encontró la búsqueda
- 20. ¿Cómo buscar todos los archivos abiertos en Eclipse?
- 21. Buscar todos los implícitos
- 22. Script PHP para recorrer todos los archivos en un directorio?
- 23. Cómo obtener archivos en un directorio, incluidos todos los subdirectorios
- 24. Listar todos los archivos y directorios en un directorio + subdirectorios
- 25. Iterar todos los archivos en un directorio usando BOOST_FOREACH
- 26. Ejecutar todos los archivos Python en un directorio
- 27. gmake compila todos los archivos en un directorio
- 28. QMake: compilando automáticamente todos los archivos en un directorio
- 29. Git - Seguimiento automático de todos los archivos en un directorio
- 30. ¿Cómo formatear todos los archivos bajo un directorio en emacs?
Emite una advertencia sobre el orden de las opciones en mi sistema. –
que Linux estás usando? – matja
+1 para maxdepth y tipo f, los he incluido en mi respuesta. –