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
감사합니다. 이것은 내가 찾고 있었던 바로 그 것이다. (그러나 -maxpath는 사용중인 find에서 구현되지 않았습니다.이 -maxdepth 1로 무엇을하려 했습니까?) – staroselskii
-maxdepth는 find의 검색을 제한하고 더 빠르게 만듭니다. 중반에 inode를 사용하면 검색 속도가 빠를 수 있으므로 검색 작업을 많이 할 필요가 없습니다. 그것없이 작동한다면,에 파티하십시오. :-) –