从ls命令中提取inode

时间:2014-06-08 19:18:46

标签: linux unix pattern-matching

我正在尝试从ls命令中提取inode:

 "ls -i"

out put:

1234 File name with space
2345 File name

为了提取,我尝试使用cut命令如下:

ls -i | cut -d" " -f1

上面的命令没有工作,因为文件名中有不同的空格数。从手册页我发现通过指定" -Q"对于ls命令,它会双引号文件名:

ls -iQ 
1234 "File name with space"
2345 "File name"

我无法找到使用此选项的方法。任何帮助将不胜感激。

由于

更新1 看起来文件名空间不是问题的原因。它是inode数量的大小。例如:

ls -iQ
2321352 "My Cheat Tables"
 507896 "My Data Sources"

注意数字前面的前导空格" 507896&#34 ;.因此,对于第一个文件,inode位于字段1(-f1)中,而第二个文件的inode编号位于第二个字段(-f2)上。

更新2(我的解决方案)

我找到了解决方案.. xD命令如下:

ls -iQ | cut -d ' "' -f1
上面的

只打印inode。但是,我想知道是否有适当或更好的方法。如果你知道正确的方法,请回复这篇文章。我是unix的新手,我很乐意以正确的方式学习它。谢谢.. :))

2 个答案:

答案 0 :(得分:1)

如果你有一个未知数量的尾随(或分隔)空格,你可以使用awk来获得所需的列:

ls -iQ1 | awk '{print $1}'

cut以外,awk会忽略任意数量的连续空格,因此您无需猜测偏移量。

更好的解决方案是明确询问您需要的信息,而不是解析ls输出:

find . -type f -printf '%i\n'

答案 1 :(得分:1)

您也可以使用stat(1)命令。

stat -c %i "File name with spaces"