Лучший способ составить список только тех файлов, которыми я владею

Лучший способ составить список только тех файлов, которыми я владею

Какую команду оболочки «в одну строку» я мог бы использовать для вывода списка всех файлов в каталоге, отображая только те, которыми владею?

решение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)

Связанный контент