解析文件时如何避免无用的使用cat?

rah*_*hmu 9 shell ksh cat

我有一个包含目录列表的文件。例如

/foo/bar/dir1
/foo/bar/dir2
/foo/bar/dir3
Run Code Online (Sandbox Code Playgroud)

我想创建所有这些目录。这是我所做的:

for dir in $(cat myfile); do mkdir $dir; done
Run Code Online (Sandbox Code Playgroud)

在避免“无用的使用 cat”的同时,这样做的正确方法是什么?

理想情况下,答案将集中在 Ksh88,但我也对其他 shell 感兴趣

Arc*_*ege 13

AProgrammer 的使用建议xargs通常是最好的,但另一种选择是使用重定向到while循环中,这允许执行附加命令并设置变量:

while read -r dir; do mkdir $dir; done < myfile
Run Code Online (Sandbox Code Playgroud)

一个更复杂的结构的例子是:

now=`date +%Y%m%d.%H%M%S`
while read -r dir; do
    newdistfile="/tmp/dist-`echo $dir | tr / _`.tgz"
    mv $dir ~/backups/$dir.$now &&
        mkdir $dir &&
        tar xzfC $newdistfile $dir
done < myfile
Run Code Online (Sandbox Code Playgroud)

xargs如果不编写“帮助程序” ,就无法做到这一点。


use*_*own 12

至少在 bash 中,只要没有包含空格和换行符的文件名,这个:

mkdir $(< myfile) 
Run Code Online (Sandbox Code Playgroud)

作品。因此,我们有一个没用使用的forxargs太。

与 相比,< 不会在 bash 中启动新进程cat,但我不知道ksh.

  • +1 用于澄清空间问题,而不是其他答案。 (2认同)

APr*_*mer 11

我会做类似的事情

xargs mkdir < myfile
Run Code Online (Sandbox Code Playgroud)

  • xargs 的无用使用。;) (3认同)