【问题标题】:Bash find | while read - few variablesbash 查找 |而读取 - 几个变量
【发布时间】:2017-08-31 09:44:24
【问题描述】:

有没有办法将 find(少数参数)的输出保存到少数变量?我需要做的是获取 find 的输出并将其作为输入提供给 while 并使用 read 。我不能将 test 与 -r -w 或 -x 一起使用(这是一项学术练习)。

类似这样的:

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 中。

【问题讨论】:

  • 为什么不用三个不同的find 命令走简单的路呢?为什么要结合三个数据流来区分它们?
  • 我不能在锻炼中使用超过一个 find。无论如何,我得到了答案。 – read 获取输入中的任何内容并与之一起使用,因此当 find 打印带有换行符的文件时,它每次只转到一个变量。而不是在while之后使用read var1 var2 var3,我应该在while之后使用read var1并读取var2,而是在循环中读取var3。因此,如果输入以新行打印,则基本上使用不止一次读取。

标签: bash while-loop find


【解决方案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[@]}"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 2018-03-11
    相关资源
    最近更新 更多