创建shell脚本以执行多个命令

时间:2018-04-09 16:25:18

标签: bash shell terminal sh executable

这是我想要做的...我想写一个脚本,它将文件夹中的所有文件作为输入发送到command2。

我知道管道用于将一个命令的输出发送到另一个命令,但在我的情况下,当我做

ls | command

这样做是将ls的输出(即文件夹中的所有文件)作为单个输入发送。相反,我希望将各个文件作为参数逐个发送到command2。

任何人都可以帮助我,我真的搜索了很多,但没有找到。

3 个答案:

答案 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}}每个文件作为参数。