我正在尝试从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的新手,我很乐意以正确的方式学习它。谢谢.. :))
答案 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"