【发布时间】:2021-12-24 03:46:22
【问题描述】:
我有一个包含部分文件名列表的 txt 文件。我只想将 txt 文件中的那些文件复制到另一个目录。但是,我需要使用正则表达式来查找文件。我似乎无法让它正常工作。有什么建议吗?
$ cat file-names.txt
name1 ACTGC
name2 ACTGG
name3 AACTN
$ ls raw/
name1_R1.fastq.gz
name1_R2.txt
name2_R1.fastq.gz
name2_R2.txt
name3_R1.fastq.gz
name4_R2.txt
name5_R1.fastq.gz
$ for i in `cut -f1 file-names.txt` ; do cp raw/"$i"_*.gz ./ ; done
不幸的是,这给出了一个错误:
cp: raw/name1_*.gz: No such file or directory
cp: raw/name2_*.gz: No such file or directory
cp: raw/name3_*.gz: No such file or directory
如何让cp 或rsync 识别* 通配符,而不是将其视为文字文件名?
感谢您的帮助。
【问题讨论】:
-
你在这里使用 glob,而不是正则表达式。
-
我无法重现这一点。这是我尝试过的:
printf '%s\t%s\n' name1 ACTGC name2 ACTGG name3 AACTN > file-names.txt创建文本文件,mkdir -p raw && touch raw/{name1_R1.fastq.gz,name1_R2.txt,name2_R1.fastq.gz,name2_R2.txt,name3_R1.fastq.gz,name4_R2.txt,name5_R1.fastq.gz}创建各种文件,然后像您一样使用for i in `cut -f1 file-names.txt` ; do cp raw/"$i"_*.gz ./ ; done。它按预期工作。您能否在不重复使用任何现有文件的情况下在新目录中重试,看看问题是否仍然存在?