linux - 如何从输入文件中获取 'ls -lrt' 数据

标签 linux shell unix

我有一个输入文件 file.csv(数据以逗号分隔符分隔),它只有 3 个以逗号分隔的行。数据将是文件名。

例如:

test,test1,test2,test3,,n
a,b,c,d,,n
p,q,r,s,,n

现在,我要求 file.csv 文件的第一行数据是否存在于目录 abc 中,命令 ls -lrt。此命令的输出应重定向到文本文件 a.txt

例如:

ls -lrt test
ls -lrt test1
....

下一步:使用命令 ls -lrt 在目录 abc 中的 file.csv 数据的第二行。此命令的输出应附加到文本文件 a.txt

例如:

ls -lrt a
ls -lrt b
....

下一步:使用命令 ls -lrt 在目录 xyz 中的 file.csv 数据的第三行。此命令的输出应附加到文本文件 a.txt

例如:

ls -lrt p
ls -lrt q
....

示例输出:

-rw-r--r-- 1 dba  dba  122 Jan 21 06:44 test
ls: p: No such file or directory

我怎样才能做到这一点?

最佳答案

可能是这样的:

dirs=(abc abc xyz)
index=1
while read -r line; do
    IFS=,
    for f in $line; do
        ls -lrt "${dirs[$index]}/$f" 2>&1
    done
    let index++
done <file.csv >a.txt

保留一个目录数组来检查每次迭代并不是特别优雅;或许您可以将您的输入数据或问题陈述整理成内部一致的内容。

数组是 Bash 的一个特性,所以不能与 sh 一起使用(但在 kshzsh 中也以类似的形式得到支持,我相信)。

如果您不使用逗号分隔的输入,这会更优雅一些。该 shell 非常擅长解析以空格分隔的标记。我们使用 IFS=, 来实现与驱动 for 循环的逗号分隔值列表大致相同的效果。

关于linux - 如何从输入文件中获取 'ls -lrt' 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34917101/

相关文章:

shell - hadoop 命令手动运行但在 cron 中不运行

linux - 在第二个字符后面每三个字符后插入一个空格

xml - 使用 nagios 向 web 服务发送 xml 请求,并检索响应

c - 使用 fork(),如何让子进程始终先运行?

c - 从位图中移除 Alpha channel (RGBA 到 RGB)

linux - 无法使用 SYSTEMCTL 在 ubuntu 16 服务器上实现 aspnet 核心

shell - 监视文件然后复制到另一个目录

node.js - 在 linux 上创建我自己的 nodejs Web 服务器

bash - bash脚本中没有空格的变量赋值背后的基本原理是什么

unix - Dig + trace不执行跟踪