所以我有这个命令行。
find . -type f |xargs ls -lS |head -20
字符串问题是我只想输出文件大小和名称。我试过了:
find . -type f -printf '%s %p\n' |xargs ls -lS |head -20
型但这给了我一堆“无法访问[inode],没有这样的文件或目录”错误。我的目标是打印目录中最大的20个文件,而不是使用ls。
vfhzx4xs1#
一个不涉及ls的答案:
ls
find . -type f -printf '%k %p\n' |sort -n |tail -n 20
字符串这将为每个文件提供大小(以KB为单位),空格,然后是文件名,按数字排序,然后您将获得最后20项(最大的20项)。问题出在ls的管道上。如果你有一个非常大的目录结构,那么sort就会失败。如果你已经知道了大概的大小,并且大多数文件都要小得多,那么你可以告诉find用一个额外的选项来排除更小的大小,例如find . -type f -size +2M -printf …,它会删除2MiB以下的任何内容。否则,你必须使用一些自定义代码,只存储最大的20个项目。
sort
find
find . -type f -size +2M -printf …
yvt65v4c2#
在Linux下使用下面的命令获取文件的大小。
du -h <<FileName>>
字符串或
du -h <<FilePath>>
型
rdlzhqv93#
你在问题中说:我的目标是打印目录中最大的20个文件,而不是使用ls。这意味着可接受的解决方案 * 不应该使用 * ls。另一个问题是xargs的使用。像find . -type f | xargs ls这样的结构将不适用于包含白色空格的文件或文件名,因为它将在将字符串交给ls之前将字符串从find中分离出来。您可以保护字符串或使用空终止字符串解决此问题,例如find . -type f -print0 | xargs -0 ls。通常情况下,使用xargs有security considerations。与其验证你的xargs结构是否安全,还不如完全避免使用它(特别是如果你不需要它)。尝试打印不带ls和不带xargs的20个最大文件:
xargs
find . -type f | xargs ls
find . -type f -print0 | xargs -0 ls
find . -type f -printf '%s %p\n' | sort -rn | head -20
字符串
jdzmm42g4#
第一个月由于ls的输出是列式的,因此只需打印适当的列即可。
jfewjypa5#
xargs获取上一个命令的每一行输出,并基本上在其参数的末尾加上一行,因此find将打印如下内容
123 ./somefile.txt
字符串xargs变成了
ls -lS 123 ./somefile.txt
型除非在该目录中有一个名为123的文件,否则会出现“无法访问”错误:
123
marc@panic:~$ touch foo marc@panic:~$ ls -lS file_that_does_not_exist foo ls: cannot access file_that_does_not_exist: No such file or directory -rw-rw-r-- 1 marc marc 0 Feb 3 14:26 foo
5条答案
按热度按时间vfhzx4xs1#
一个不涉及
ls
的答案:字符串
这将为每个文件提供大小(以KB为单位),空格,然后是文件名,按数字排序,然后您将获得最后20项(最大的20项)。
问题出在
ls
的管道上。如果你有一个非常大的目录结构,那么
sort
就会失败。如果你已经知道了大概的大小,并且大多数文件都要小得多,那么你可以告诉find
用一个额外的选项来排除更小的大小,例如find . -type f -size +2M -printf …
,它会删除2MiB以下的任何内容。否则,你必须使用一些自定义代码,只存储最大的20个项目。yvt65v4c2#
在Linux下使用下面的命令获取文件的大小。
字符串
或
型
rdlzhqv93#
你在问题中说:
我的目标是打印目录中最大的20个文件,而不是使用ls。
这意味着可接受的解决方案 * 不应该使用 *
ls
。另一个问题是
xargs
的使用。像find . -type f | xargs ls
这样的结构将不适用于包含白色空格的文件或文件名,因为它将在将字符串交给ls
之前将字符串从find
中分离出来。您可以保护字符串或使用空终止字符串解决此问题,例如find . -type f -print0 | xargs -0 ls
。通常情况下,使用xargs
有security considerations。与其验证你的xargs
结构是否安全,还不如完全避免使用它(特别是如果你不需要它)。尝试打印不带
ls
和不带xargs
的20个最大文件:字符串
jdzmm42g4#
第一个月
由于
ls
的输出是列式的,因此只需打印适当的列即可。jfewjypa5#
xargs
获取上一个命令的每一行输出,并基本上在其参数的末尾加上一行,因此find将打印如下内容字符串
xargs
变成了型
除非在该目录中有一个名为
123
的文件,否则会出现“无法访问”错误:型