2014-03-29 1 views
0

스크립트에 대한 인수로 전달 된 지정된 파일을 가리키는 심볼릭 링크의 모든 파일 이름을 인쇄하는 다음 스크립트의 현재 디렉토리에서 주어진 inode로 이름을 해석하는 방법은 무엇입니까? 목록은 ctime으로 정렬되어야합니다.현재 디렉토리에서 inode로 이름 확인

#!/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 ''| 조회

누군가가 작업을 수행하는보다 세련된 방법을 제안한다면 정말 고맙겠습니다.

OS : SunOS의 5.10 쉘이 같은 KSH

답변

3

뭔가?

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

나 :

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

감사합니다. 이것은 내가 찾고 있었던 바로 그 것이다. (그러나 -maxpath는 사용중인 find에서 구현되지 않았습니다.이 -maxdepth 1로 무엇을하려 했습니까?) – staroselskii

+0

-maxdepth는 find의 검색을 제한하고 더 빠르게 만듭니다. 중반에 inode를 사용하면 검색 속도가 빠를 수 있으므로 검색 작업을 많이 할 필요가 없습니다. 그것없이 작동한다면,에 파티하십시오. :-) –