我有一个包含目录列表的文件。例如
/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)
作品。因此,我们有一个没用使用的for
,xargs
太。
与 相比,< 不会在 bash 中启动新进程cat
,但我不知道ksh
.
APr*_*mer 11
我会做类似的事情
xargs mkdir < myfile
Run Code Online (Sandbox Code Playgroud)