【问题标题】:bash - assigning output of find to variable while looping through listbash - 在遍历列表时将 find 的输出分配给变量
【发布时间】:2019-01-12 06:08:09
【问题描述】:

我是 shell 脚本的新手。在 bash 中,我试图在循环列表时将 find 的输出分配给一个新变量。

for i in {25,27}; do
     r1=$(find $i*R1_001.fastq.gz)
     r2=$(find $i*R2_001.fastq.gz)
done

我想要让计算为 r1 和 r2 分配一个文件名。例如:

$ 回声 $r1

25-NVB206M02_S27_R1_001.fastq.gz

但是,计算机将此解释为好像 * 不是通配符。我收到一条错误消息:

发现:`25*R1_001.fastq.gz':没有这样的文件或目录

感谢您提供的任何建议。

【问题讨论】:

  • 检查查找手册页。 find 的第一个参数是开始搜索的文件夹。
  • 顺便说一句,你可能对r1=$i*R1_001.fastq.gz感兴趣

标签: bash shell variables find glob


【解决方案1】:

如果你想使用 find 你需要类似的东西:

r1=$(find . -name "${i}*R1_001.fastq.gz" | sed 's#^.*/##')

或者,更好的是,您可以使用:

r1="${i}*R1_001.fastq.gz"

请注意,您可能会匹配 0 个或多个文件。如果多个文件匹配,例如,如果i=2r1r2 将匹配2-NVB...20-NVB...21-NVB...200-NVB... 等等。您可能只希望该变量包含一个文件名。尝试收紧你正在匹配的内容。

如果没有文件匹配 r1/r2 可能仍然不为空。示例:

(pi19 692) $ ls "*foo*"
ls: *foo*: No such file or directory
(pi19 693) $ r1="*foo*"
(pi19 694) $ echo $r1
*foo*

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-16
    • 2023-03-19
    • 2012-10-13
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    相关资源
    最近更新 更多