Я ищу команду, которая будет возвращать владельца каталога и только это - например, регулярное выражение для разбора ls -lat
команды или что-то подобное? Я хочу использовать результат в другом скрипте.
shell-script
ls
Джейсон
источник
источник
stat
для всего сайта) в/usr/local/bin
доме пользователя или где-то в нем), и он редко доступен на других отделениях.stat -c %U
имеет преимущество также работает с BusyBox , еслиstat
команда компиляции.stat -c '%U' DIR
напечатаетUNKNOWN
, что менее полезно или более уместно, в зависимости от того, как вы на это смотрите.Анализ выходных данных
ls
редко является хорошей идеей , но получение первых нескольких полей является исключением, оно фактически работает на всех «традиционных» единицах (оно не работает на платформах, таких как некоторые реализации Windows, которые допускают пробелы в именах пользователей).Другой вариант - использовать
stat
команду, но проблема сstat
оболочкой заключается в том, что существует несколько команд с разным синтаксисом, поэтомуstat
сценарий оболочки непереносим (даже в установках Linux).Обратите внимание, что проверка того, является ли данный пользователь владельцем, является другим предложением.
источник
ls | awk
сожалению, есть некоторые предостережения с подходом, как я уже отмечал здесь . Я еще не нашел решение проблемы "target file / dir - это символическая ссылка с другим именем", о которой я упоминал в своем недавнем комментарии.find . -user "$username" -print -prune -o -prune
вы могли просто сделатьfind . -maxdepth 0 -user "$username"
awk 'NR==1 {print $3}'
вместо простоawk '{print $3}'
? Я не уверен, почемуNR==1
это необходимо здесь.ls
где новая строка в пути приводит к тому, что линия разделяется на две части (что, я считаю, является крайним случаем, который вы пытаетесь охватить)? На GNUls
(версия) довольно новый, BusyBoxls
и FreeBSDls
новой строки возвращается как$'\n'
,?
и?
, соответственно.Это также можно сделать с помощью GNU find:
Это не переносимо за пределы системы GNU, но я был бы удивлен, обнаружив дистрибутив Linux, где он не работает.
источник
find
нет-printf
.-printf
:-(.В чистом bash вы можете преобразовать выходные данные
ls
в массив и индексировать в него.Это не так элегантно, как использование
stat
,find
илиawk
, но может работать в крайнем случае.источник