该怎么做' ls -lrt'来自输入文件的数据

时间:2016-01-21 06:49:16

标签: linux shell unix

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

E.g:

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

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

E.g:

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

下一步:目录file.csvabc数据的第二行,命令为ls -lrt。此命令的输出应附加到文本文件a.txt

E.g:

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

下一步:目录file.csvxyz数据的第三行,命令为ls -lrt。此命令的输出应附加到文本文件a.txt

E.g:

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

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

这样的事情可能是:

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循环。

相关问题