Lou*_*ise 0 linux bash awk cut
如果我这样做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
Run Code Online (Sandbox Code Playgroud)
我真的想删除前 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
Run Code Online (Sandbox Code Playgroud)
ls不能这样做,似乎。这里还有其他关于删除多列的问题,但不是从一开始。
ls是一个交互式工具,其输出不应被解析。
考虑使用替代工具,例如stat(推荐 GNU 版本):
stat -c '%s %y %n' *
Run Code Online (Sandbox Code Playgroud)
输出并不完全相同,但您可以完全控制格式。stat --help提供有关可能的格式序列的更多信息。
使用 GNU stat,您还可以使用--printf在格式字符串中添加换行符或制表符等转义字符,以使解析更容易:
stat --printf '%s\t%Y\t%n\n' *
Run Code Online (Sandbox Code Playgroud)
%Y(最后一次修改,自 Epoch 以来的秒数)比%y(人类可读的)更适合解析。
如果文件名包含换行符,这仍然会中断,因此根据您计划如何使用此信息,您可能希望在格式字符串的末尾使用 a\0而不是 a\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
Run Code Online (Sandbox Code Playgroud)
假设您使用基于循环的方法,您可以使用 将日期转换为您想要的任何格式date,例如:
date -d @"$modified" +'%b %d %H:%m'
Run Code Online (Sandbox Code Playgroud)