gpt4 book ai didi

bash - 重命名目录中特定类型的所有文件

转载 作者:行者123 更新时间:2023-11-29 09:51:16 25 4
gpt4 key购买 nike

我正在尝试使用 bash 重命名目录中与特定模式匹配的所有 .txt 文件。我在下面的两次尝试都从目录中删除了文件并引发了错误。谢谢:)

输入

16-0000_File-A_variant_strandbias_readcount.vcf.hg19_multianno_dbremoved_removed_final_index_inheritence_import.txt
16-0002_File-B_variant_strandbias_readcount.vcf.hg19_multianno_dbremoved_removed_final_index_inheritence_import.txt

期望的输出

16-0000_File-A_multianno.txt
16-0002_File-B_multianno.txt

Bash 尝试 1 这会从目录中删除文件

for f in /home/cmccabe/Desktop/test/vcf/overall/annovar/*_classify.txt ; do
# Grab file prefix.
p=${f%%_*_}
bname=`basename $f`
pref=${bname%%.txt}
mv "$f" ${p}_multianno.txt
done

Bash attempt 2 Substitution replacement not terminated at (eval 1) line 1.

for f in /home/cmccabe/Desktop/test/vcf/overall/annovar/*_classify.txt ; do
# Grab file prefix.
p=${f%%_*_}
bname=`basename $f`
pref=${bname%%.txt}
rename -n 's/^$f/' *${p}_multianno.txt
done

最佳答案

你不需要循环。 rename 单独可以做到这一点:

rename -n 's/(.*?_[^_]+).*/${1}_multianno.txt/g' /home/cmccabe/Desktop/test/vcf/overall/annovar/*_classify.txt

正则表达式的意思大致是,捕获从开始到第二个 _ 的所有内容,匹配其余的,并替换为捕获的前缀并附加 _multianno.txt

使用 -n 标志,此命令将打印它要执行的操作而不实际执行。当输出看起来不错时,删除 -n 并重新运行。

关于bash - 重命名目录中特定类型的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42041486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com