通过当前目录中的inode解析名称

时间:2014-03-29 17:02:02

标签: perl awk solaris ksh

如何通过以下脚本中当前目录中的给定inode来解析名称,该脚本打印指向作为参数传递给脚本的指定文件的符号链接的所有文件名。该列表应按ctime排序。

#!/usr/bin/ksh

IFS="`printf '\n\t'`"

USAGE="usage: symlink.sh <file>"

get_ctime() {
    perl -se 'use File::stat; $file=lstat($filename); print $file->ctime' -- -filename="$1"
}

stat_inode() {
    perl -se 'use File::stat; $file=stat($filename); if (defined $file) { print $file->ino; }' -- -filename="$1"
}

lstat_inode() {
    perl -se 'use File::stat; $file=lstat($filename); if (defined $file) { print $file->ino; }' -- -filename="$1"
}


if [ $# -eq 0 ]; then 
    echo "$USAGE"
    exit 1
fi

FILE_NAME="$1"
FILE_INODE=$(stat_inode "$FILE_NAME")

if [ ! -e "$FILE_NAME" ]; then
    echo "no such file \"$FILE_NAME\""
    exit 1
fi


for LINK in ./* ./.[!.]*  ;do
    if [ -L "$LINK" ]; then
    TARGET_INODE=$(stat_inode "$LINK")
    if [ ! -z "$TARGET_INODE" ]; then
        if [ "$FILE_INODE" -eq "$TARGET_INODE" ]; then
        echo $(get_ctime "$LINK") $(lstat_inode "$LINK");
        fi
    fi
    fi
done | sort -nk1 | awk '{print $2}'

基本上,我想将awk传递给某种类似的查找函数:| awk''|查找

如果有人提出更优雅的方式来完成任务,我真的很感激。

操作系统:SunOS 5.10 壳牌:KSH

1 个答案:

答案 0 :(得分:3)

这样的东西?

$ find . -maxdepth 1 -inum 2883399 
./.jshintrc
$

或:

$ echo 2883399 | xargs -IX find . -maxdepth 1 -inum X
./.jshintrc
$