DGA*_*DGA 3 linux bash command-line
我的 linux 机器上有一个奇怪的行为,我需要你的建议。我想捕获此命令的输出
ls -log /some/directory
Run Code Online (Sandbox Code Playgroud)
从命令行运行命令结果正常:
-rw-r--r--. 1 22650880 2013-09-09 12:02 file1.txt
-rwxr--r--. 1 20733952 2012-07-09 17:42 file2.txt
-rw-r--r--. 1 31596544 2013-09-09 23:42 file3.txt
-rw-r--r--. 1 15773696 2013-09-10 11:15 file4.txt
Run Code Online (Sandbox Code Playgroud)
所以我使用awk( ls -log /some/directory| awk '{print $6","$4" "$5}' | tr "\n" ";") 的最终结果:
file1.txt,2013-09-09 12:02;file2.txt,2012-07-09 17:42;...
Run Code Online (Sandbox Code Playgroud)
当我将ls命令放入 Bash 脚本时,我的问题出现了,因为日期已转换。结果是Sep 09 12:02而不是2013-09-10 11:15
如何在命令行输出中获取日期?
的输出ls取决于LANG环境。来自info ls:
默认情况下,文件时间戳以缩写形式列出。大多数语言环境使用像
2002-03-30 23:45'. However, the default POSIX locale uses a date likeMar 30 2002'这样的时间戳来表示非最近的时间戳,而使用像“Mar 30 23:45”这样的无年份日期和时间来表示最近的时间戳。
比较这两个变体:
$ LANG=C ls -log
total 0
-rw-r--r-- 1 0 Sep 10 10:34 file1
-rw-r--r-- 1 0 Sep 10 10:34 file2
-rw-r--r-- 1 0 Sep 10 10:34 file3
-rw-r--r-- 1 0 Sep 10 10:34 file4
$ LANG=en_US.utf8 ls -log
total 0
-rw-r--r-- 1 0 2013-09-10 10:34 file1
-rw-r--r-- 1 0 2013-09-10 10:34 file2
-rw-r--r-- 1 0 2013-09-10 10:34 file3
-rw-r--r-- 1 0 2013-09-10 10:34 file4
Run Code Online (Sandbox Code Playgroud)
但是,与往常一样,解析 的输出ls是一个坏主意,因为——正如您所看到的——很容易中断。考虑stat改用
for file in *; do
stat -c "%n,%z;" "$file"
done
Run Code Online (Sandbox Code Playgroud)
您可以在其中更准确地指定您想要的时间戳:
%x Time of last access
%y Time of last modification
%z Time of last change
Run Code Online (Sandbox Code Playgroud)
你也不需要awk了。
| 归档时间: |
|
| 查看次数: |
3797 次 |
| 最近记录: |