1

ls -l から次のようなカスタム出力を生成する 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 を解析してアクセス許可とファイル/ディレクトリを取得することです。これを解決するヒントを教えてください。

敬具、コーン

4

1 に答える 1

2

ls useを解析しない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
于 2013-07-04T19:53:52.513 に答える