Perl 按当前目录中的索引节点解析名称
在以下脚本中,如何通过当前目录中的给定inode解析名称,该脚本打印指向作为参数传递给脚本的指定文件的符号链接的所有文件名。列表应按ctime排序Perl 按当前目录中的索引节点解析名称,perl,awk,solaris,ksh,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' -- -fi
#!/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}'
#/usr/bin/ksh
IFS=“`printf'\n\t'`”
用法=“用法:symlink.sh”
获取时间(){
perl-se'use File::stat;$File=lstat($filename);print$File->ctime'--filename=“$1”
}
stat_inode(){
perl-se'use File::stat;$File=stat($filename);if(已定义的$File){print$File->ino;}'--filename=“$1”
}
lstat_inode(){
perl-se'use File::stat;$File=lstat($filename);if(已定义的$File){print$File->ino;}'--filename=“$1”
}
如果[$#-eq 0];然后
回显“$USAGE”
出口1
fi
FILE_NAME=“$1”
FILE\u INODE=$(stat\u INODE“$FILE\u NAME”)
如果[!-e“$FILE_NAME”];然后
echo“无此类文件”$file\u NAME“
出口1
fi
用于链接到。/*./.!]*;做
如果[-L“$LINK”];然后
TARGET_INODE=$(stat_INODE“$LINK”)
如果[!-z“$TARGET_INODE”];然后
如果[“$FILE\u INODE”-eq“$TARGET\u INODE”];然后
echo$(get_-ctime“$LINK”)$(lstat_-inode“$LINK”);
fi
fi
fi
完成|排序-nk1 | awk'{print$2}'
基本上,我希望通过管道将awk传输到某种查找函数,如:| awk'| lookup
如果有人提出一种更优雅的方式来完成这项任务,我将不胜感激
操作系统:sunos5.10
Shell:KSH像这样的东西
$ find . -maxdepth 1 -inum 2883399
./.jshintrc
$
或:
像这样的
$ find . -maxdepth 1 -inum 2883399
./.jshintrc
$
或:
像这样的
$ find . -maxdepth 1 -inum 2883399
./.jshintrc
$
或:
像这样的
$ find . -maxdepth 1 -inum 2883399
./.jshintrc
$
或:
非常感谢。这正是我想要的。(但是-maxpath没有在我使用的find中实现。你用这个-maxdepth 1试图实现什么?)-maxdepth限制了find的搜索,并将使其更快。在你中间,有一个inode在手,它不需要做太多的搜索,所以加速可能是不存在的。如果在没有它的情况下也能正常工作,请在以下时间参加聚会::-)非常感谢。这正是我想要的。(但是-maxpath没有在我使用的find中实现。你用这个-maxdepth 1试图实现什么?)-maxdepth限制了find的搜索,并将使其更快。在你中间,有一个inode在手,它不需要做太多的搜索,所以加速可能是不存在的。如果在没有它的情况下也能正常工作,请在以下时间参加聚会::-)非常感谢。这正是我想要的。(但是-maxpath没有在我使用的find中实现。你用这个-maxdepth 1试图实现什么?)-maxdepth限制了find的搜索,并将使其更快。在你中间,有一个inode在手,它不需要做太多的搜索,所以加速可能是不存在的。如果在没有它的情况下也能正常工作,请在以下时间参加聚会::-)非常感谢。这正是我想要的。(但是-maxpath没有在我使用的find中实现。你用这个-maxdepth 1试图实现什么?)-maxdepth限制了find的搜索,并将使其更快。在你中间,有一个inode在手,它不需要做太多的搜索,所以加速可能是不存在的。如果在没有它的情况下也能正常工作,请在以下时间参加聚会::-)