这是我想要做的...我想写一个脚本,它将文件夹中的所有文件作为输入发送到command2。
我知道管道用于将一个命令的输出发送到另一个命令,但在我的情况下,当我做
时ls | command
这样做是将ls的输出(即文件夹中的所有文件)作为单个输入发送。相反,我希望将各个文件作为参数逐个发送到command2。
任何人都可以帮助我,我真的搜索了很多,但没有找到。
答案 0 :(得分:1)
使用以下任何一种方法,但我建议使用第一种方法,因为没有创建子shell
for files in *;do
if [[ -f "$files" ]];then
echo "$files"
fi
done
while read line;do
if [[ -f "$line" ]];then
echo "$line"
fi
done < <(ls)
答案 1 :(得分:0)
您可以使用find
,例如:
$ cat do.sh
#!/usr/bin/env sh
printf "arg: %s\n" "$1"
$ touch {1..10}
$ find . -type f -exec ./do.sh {} \;
arg: ./6
arg: ./10
arg: ./5
arg: ./3
arg: ./9
arg: ./2
arg: ./8
arg: ./do.sh
arg: ./1
arg: ./4
arg: ./7
答案 2 :(得分:0)
您可以使用xargs
。
$ find . -maxdepth 1 -print0 | xargs -0 -l command
这将打印当前目录中的所有文件,用空字符分隔名称,然后xargs
一次一个地获取它们(-l
)并使用command
调用{{1}}每个文件作为参数。