如何使用BASH命令显示由一个到多个空格分隔的特定列?

时间:2018-05-05 18:22:32

标签: bash cut

我有不同的数据,这些数据是在下面显示的不同日期和时间创建的。

-rw-rw-r-- 1 user user 157559823 May 23  09:39 1x100.lammpstrj
-rw-rw-r-- 1 user user 157560063 Jul  2  08:22 2x200.lammpstrj
-rw-rw-r-- 1 user user 157561559 Jul  7  13:13 3x250.lammpstrj
-rw-rw-r-- 1 user user 157560934 Jul  9  10:10 4x300.lammpstrj
-rw-rw-r-- 1 user user 157566774 Jul 19  11:29 5x350.lammpstrj

我希望显示最后一列是带有后缀.lammpstrj的文件名。如果我使用

`ls -latr *.lammpstrj | cut -d ' ' -f 9`

我无法获取所有文件名。我注意到月和日之间的多个空格导致了这样的问题。针对与此类似的案例的任何通用解决方案?我真诚地感谢您的时间和帮助。

2 个答案:

答案 0 :(得分:1)

如果您只是在文件名之后,使用find会将您带到那里:

find *.lammpstrj -maxdepth 1 -type f

答案 1 :(得分:1)

如果您只想查看它们:ls -1 *.lammpstrj

如果您想迭代它们:for file in *.lammpstrj; do ...

如果您想存储它们以供日后使用:

files=(*.lammpstrj)
# now do stuff with them, for example print them:
printf "%s\n" "${files[@]}"
# or something else
for file in "${files[@]}"; do ...

要获取有关文件的元数据,请使用stat

stat -c "%Y %s %n" *.lammpstrj | while read -r mtime size filename; do
    printf "%s has size %d and was last modified %s\n" \
      "$filename" \
      "$size" \
      "$(date -d "@$mtime" "+%Y-%m-%d %H:%M:%S")"
done

或在-printf

中使用find