2013-07-04 2 views
1

Я пытаюсь написать сценарий AWK для создания пользовательского вывода из Ls -l что-то вроде этого:произвести заказ приятнее LS-л выход, используя AWK


File xxx.txt has size of 100 blocks, was last modified on July 3 2013, is owned by Kohn. The user has read permission, has write permission and has execute permission. 

Dir abc has size of 200 blocks, was last modified on July 1 2013, is owned by Kohn. The user has read permission, does not have write permission and has execute permission. 
... 

Я нахожу самой сложной задачей является разбор первого столбца $ 1 для получения разрешения и файла/каталога. Можете ли вы дать мне подсказку, как это решить?

С уважением, Kohn

+0

Звучит как домашнее задание! –

+1

[Не разбирайте ls] (http://mywiki.wooledge.org/ParsingLs), используйте ['stat'] (http://man.cx/stat) –

ответ

2

Don't parse ls использование stat

#!/bin/bash 

myls() { 
    local filetype=$(stat -c "%F" "$1") 
    local format="${filetype^} %n has size of %b blocks, " 
    format+="was last modified on $(date -d "@$(stat -c "%Y" "$1")" "+%B %e, %Y"), " 
    format+="is owned by %U. " 
    format+="$(permissions "$1")" 
    stat -c "$format" "$1" 
} 

permissions() { 
    local user_perms=$(stat -c "%A" "$1") 
    local string="The user " 
    string+="$(has ${user_perms:1:1} r) read permission, " 
    string+="$(has ${user_perms:2:1} w) write permission, " 
    string+="$(has ${user_perms:3:1} x) execute permission." 
    echo "$string" 
} 
has() { [[ $1 == $2 ]] && echo "has" || echo "does not have"; } 

for file; do 
    myls "$file" 
done 
Смежные вопросы