2017-04-05 81 views
0

有没有办法将find(少数参数)的输出保存到少数变量中?我需要做的是获取find的输出并将其作为输入提供给while并使用read。我不能使用-r -w或-x进行测试(这是一项学术练习)。Bash找到|而只读 - 几个变量

事情是这样的:

find $1 -writable -printf "%f %p\n" , -readable -printf "%f %p\n" , -executable -printf "%f %p\n" | while read var1 var2 var3 
do 

    echo $var1 
    echo $var2 
    echo $var3 

done 

在VAR1我想有只可写文件,VAR2可读,VAR3可执行文件。 而不是它全部在var1中。

+0

为什么不去用三种不同的'find'命令的简单方法?为什么要合并三个数据流只是为了将它们分开? – Jens

+0

我不能在练习中多用一个。无论如何,我得到了答案。 - 读取占用输入的任何一行,并与之一起工作,因此,当查找打印具有新行字符的文件时,它每次只有一个变量。而不是使用读取var1 var2 var3,之后我应该在while和read var2之后使用读取var1,在循环中读取var3。因此,如果输入用新行打印,基本上使用多于​​一个读取。 – zderzak678

回答

1

不明白你的锻炼,但也许像可可用作开始

while IFS= read -r -d '' file; do 
    [[ -w "$file" ]] && f_wrt+=("$file") 
    [[ -r "$file" ]] && f_rdr+=("$file") 
    [[ -x "$file" ]] && f_exe+=("$file") 
done < <(find . -maxdepth 1 -type f -print0) 

printf "writeable : %s\n" "${f_wrt[@]}" 
printf "readable : %s\n" "${f_rdr[@]}" 
printf "executable : %s\n" "${f_exe[@]}"