Какую команду оболочки «в одну строку» я мог бы использовать для вывода списка всех файлов в каталоге, отображая только те, которыми владею?
решение1
Коротко говоря, это будет выглядеть так:
find . -maxdepth 1 -user $USER
Если вы ищете в текущем каталоге, вы можете опустить .
. Если вы не знаете, $USER
доступен ли , вы можете заменить его на $LOGNAME
или $(whoami)
.
Добавить -ls
для отображения сведений о файле, например:
find / -maxdepth 1 -user root -ls
Если вы хотите предоставить пользовательские флаги, ls
вы можете использовать их через -exec
:
find / -maxdepth 1 -user root -exec ls -ld {} +
(В этом случае -d
флаг ls
необходим для перечисления самих каталогов, а не их содержимого.)
решение2
Используйте следующую команду
[username@localhost~]$ find / -user username -exec ls -l {} \; 2>/dev/null
найти все файлы во всей системе, принадлежащие имени пользователя. Если вы нашли из определенного каталога, просто замените местоположение / .
[username@localhost~]$ find /path/of/direcotry -user username -exec ls -l {} \; 2>/dev/null
Примечание: 2>/dev/null обнуляет вывод ошибки.
решение3
Поскольку вы не указали формат вывода, вы также можете сделать это с помощью ls и grep:
ls -lG | grep username
Сначала мы используем ls с параметром -l, чтобы получить список, включающий имя пользователя и имя группы.
Затем мы удаляем имя группы из результата с помощью параметра -G.
После этого мы просто передаем его в grep и получаем все результаты с нужным именем пользователя.
РЕДАКТИРОВАТЬ: Как отмечено в комментариях, этоне сейфили пуленепробиваемое решение - однако, в зависимости от ваших обстоятельств, это может быть быстрым и грязным. Интерактивно это может быть приемлемо, но вы не должны использовать это ни в каких сценариях!
решение4
С помощью zsh
, вы можете сделать это, используяквалификатор globu
:
u
идентификаторфайлы, принадлежащие идентификатору пользователяидентификаторесли это число. В противном случае,идентификаторуказывает имя пользователя: символ после '
u
' будет взят как разделитель, а строка между ним и следующим соответствующим разделителем будет взята как имя пользователя. Начальные разделители '[
', '{
' и '<
' соответствуют конечным разделителям ']
', '}
' и '>
' соответственно; любой другой символ соответствует самому себе. Выбранные файлы принадлежат этому пользователю. Например, 'u:foo:
' или 'u[foo]
' выбирает файлы, принадлежащие пользователю 'foo
'.
так например с пользователемID
print -rl ./*(u1027)
или с именем пользователя
print -rl ./*(u_yourusernamegoeshere_)
Как обычно, вы можете комбинировать его с другими квалификаторами, модификаторами и т. д., например, чтобы вывести список только обычных файлов, скрытых или нет, принадлежащих пользователю, UID
1027
и отсортировать по их mtime
:
print -rl ./*(.Domu1027)