Отображение сведений о каталогах в пути - bash назначение сценариев - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть задание, где мне нужно создать скрипт. Я хотел бы помочь. Я боролся, и в этот момент я потерян и не знаю, как поступить. Я должен создать сценарий, который будет принимать путь, гарантирующий, что все элементы в пути являются каталогами, а затем перейдет к отображению подробностей каталога следующим образом.

Если введено ./pathdisplay ~unx510/sample.dir1/testdir1, это отображается:

Owner   Group   Other   Filename 
-----   -----   -----   -------- 

r w x   r - x   r - x   / 

r w x   r - x   r - x   home 

r w x   - - x   - - x   unx510 

r w x   r - x   r - x   sample.dir1 

r w x   r - x   r - x   testdir1 
  Links: 4  Owner: unx510  Group: users  Size: 229  Modified: Feb 22 2015



Valid commands:  u(p)  d(own)  q(uit) 

Это то, что у меня пока есть:

if [ $# -ne 1 ]; then
    echo "Usage: ./pathdisplay [ dir-name ]" >&2
    exit 1

elif [ ! -d "$1" ]; then
    echo "$1 is not a valid directory name" >&2
    exit 1
else 
    allDirectories=$(tr '/.' '\n' < <(printf "%s" $1))
    numOfDirectories=$(tr '/.' '\n' < <(printf "%s" $1) | wc -l)

    SAVEIFS=$IFS   
    IFS=$'\n'      
    directories=($allDirectories) 
    IFS=$SAVEIFS

    for (( i=0; i<${#directories[@]}; i++ ))
    do
        if [ $i -le 0 ]; then
            $(ls  ${directories[$i]})
        else
               tempIndex=$i 
        previousDirectory=${directories[i--]}
            $(ls '$previousDirectory/'${directories[$i]})
        fi
    done


    exit 0
fi

Я не совсем понимаю, как перебирать каталоги. Как мне нужно указать предыдущий каталог. И затем, чтобы отобразить экран, используя команды для отображения разрешений и деталей. Буду признателен за любую помощь.

https://ideone.com/Dhj7Sq - ссылка на сценарий bash на данный момент

http://czegel.com/seneca/unx510-dps918/assign1a/Assign1a.html - спецификации назначения

http://czegel.com/seneca/unx510-dps918/assign1a/Assign1b.html - назначение скриншотов

Ответы [ 2 ]

0 голосов
/ 11 апреля 2020

Замените for l oop на следующее:

    for dir in "${directories[@]}"
    do
        stat -c "%A  %n" "$dir"
        cd "$dir"
    done

Вышесказанное должно дать вам несколько советов относительно вашей цели.

0 голосов
/ 11 апреля 2020

Используйте команду 'find', чтобы получить список всех каталогов, которые вы хотите, и вы можете использовать stat для генерации вывода

find . -maxdepth 1 -type d|xargs stat -c "%A %n, links:%h, owner:%U, group:%G, size:%B, modified:%y"

Или вы можете просто взять только команду find, чтобы перебрать элементы по l oop и сгенерировать более форматированный вывод

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...