如果我执行 ls -o
我会得到
-rw-rw-r-- 1 louise 347967 Aug 28 2017 Screenshot from 2017-08-28 09-33-01.png
-rw-rw-r-- 1 louise 377739 Aug 29 2017 Screenshot from 2017-08-29 10-39-49.png
-rw-rw-r-- 1 louise 340682 Aug 29 2017 Screenshot from 2017-08-29 10-40-02.png
我真的想删除前 3 列,所以我得到了
347967 Aug 28 2017 Screenshot from 2017-08-28 09-33-01.png
377739 Aug 29 2017 Screenshot from 2017-08-29 10-39-49.png
340682 Aug 29 2017 Screenshot from 2017-08-29 10-40-02.png
ls
似乎无法做到这一点。 SO 上还有其他关于删除多列的问题,但不是从一开始就删除。
最佳答案
ls
是一个交互式工具,它的输出是 not supposed to be parsed .
考虑使用替代工具,例如 stat
(推荐使用 GNU 版本):
stat -c '%s %y %n' *
输出不完全相同,但您可以完全控制格式。 stat --help
提供了有关可能的格式序列的更多信息。
使用 GNU stat,您还可以使用 --printf
在格式字符串中添加转义字符,例如换行符或制表符,以简化解析:
stat --printf '%s\t%Y\t%n\n' *
%Y
(最后一次修改,自 Epoch 以来的秒数)比 %y
(人类可读)更适合解析。
如果文件名包含换行符,这仍然会中断,因此根据您计划如何使用此信息,您可能希望使用 \0
而不是 \n
在格式字符串和进程记录的末尾以空字节而不是换行符终止。
或者,您可能会发现循环遍历文件并一个一个地调用 stat
,提取您需要的任何内容会更容易:
for file in *; do
read -r size modified name < <(stat '%s %Y %n' "$file")
# do whatever with $size, $modified and $name here
done
假设您采用基于循环的方法,您可以使用 date
将日期转换为您想要的任何格式,例如:
date -d @"$modified" +'%b %d %H:%m'
关于linux - 从 `ls` 中删除前 3 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49403267/