¿Cuál sería el mejor comando de shell "de una sola línea" que podría usar para enumerar todos los archivos en un directorio, mostrando solo aquellos que poseo?
Respuesta1
Una breve frase sería:
find . -maxdepth 1 -user $USER
Si está buscando en el directorio actual, puede omitir el archivo .
. Si no sabes si $USER
está disponible, puedes reemplazarlo con $LOGNAME
o $(whoami)
.
Agregar -ls
para mostrar detalles del archivo, por ejemplo:
find / -maxdepth 1 -user root -ls
Si desea proporcionar banderas personalizadas, ls
puede utilizarlas a través de -exec
:
find / -maxdepth 1 -user root -exec ls -ld {} +
(En ese caso, se requiere la -d
bandera ls
para enumerar los directorios como ellos mismos y no como su contenido).
Respuesta2
Utilice el siguiente comando
[username@localhost~]$ find / -user username -exec ls -l {} \; 2>/dev/null
busque todos los archivos en todo el sistema propiedad del nombre de usuario. Si lo encuentra en un directorio específico, simplemente reemplace la ubicación / .
[username@localhost~]$ find /path/of/direcotry -user username -exec ls -l {} \; 2>/dev/null
NB:2>/dev/null anula la salida de error.
Respuesta3
Como no especificaste el formato de salida, también puedes hacer esto con ls y grep:
ls -lG | grep username
Primero usamos ls con el parámetro -l para obtener el listado que incluye el nombre de usuario y el nombre del grupo.
Luego eliminamos el nombre del grupo del resultado con el parámetro -G.
Después de eso, simplemente lo canalizamos a grep y obtenemos todos los resultados con el nombre de usuario deseado.
EDITAR: Como se señaló en los comentarios, esto esno es una caja fuerteo una solución a prueba de balas; sin embargo, dependiendo de las circunstancias, puede ser una solución rápida y sucia. Interactivamente, puede ser aceptable, ¡pero no debes usarlo en ningún script!
Respuesta4
Con zsh
, puedes hacerlo usando elcalificador globalu
:
u
identificaciónarchivos propiedad de ID de usuarioidentificaciónsi ese es un numero. De lo contrario,identificaciónespecifica un nombre de usuario: el carácter después de '
u
' se tomará como separador y la cadena entre este y el siguiente separador coincidente se tomará como nombre de usuario. Los separadores iniciales '[
', '{
' y '<
' coinciden con los separadores finales ']
', '}
' y '>
', respectivamente; cualquier otro carácter coincide con él mismo. Los archivos seleccionados son los propiedad de este usuario. Por ejemplo, 'u:foo:
' o 'u[foo]
' selecciona archivos propiedad del usuario 'foo
'.
entonces, por ejemplo, con el usuarioID
print -rl ./*(u1027)
o con nombre de usuario
print -rl ./*(u_yourusernamegoeshere_)
Como de costumbre, puede combinarlo con otros calificadores, modificadores, etc., por ejemplo, para enumerar solo archivos normales, ocultos o no, propiedad del usuario UID
1027
y ordenados por su mtime
:
print -rl ./*(.Domu1027)