惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
博客园 - 【当耐特】
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Recent Announcements
Recent Announcements
D
Docker
GbyAI
GbyAI
酷 壳 – CoolShell
酷 壳 – CoolShell
WordPress大学
WordPress大学
The Cloudflare Blog
雷峰网
雷峰网
A
About on SuperTechFans
小众软件
小众软件
博客园 - Franky
博客园 - 聂微东
F
Full Disclosure
大猫的无限游戏
大猫的无限游戏
C
Check Point Blog
MongoDB | Blog
MongoDB | Blog
G
Google Developers Blog
Microsoft Azure Blog
Microsoft Azure Blog
U
Unit 42
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
V2EX
Engineering at Meta
Engineering at Meta
宝玉的分享
宝玉的分享
aimingoo的专栏
aimingoo的专栏
量子位
P
Proofpoint News Feed
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
罗磊的独立博客
Martin Fowler
Martin Fowler
D
DataBreaches.Net
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
S
Secure Thoughts
Project Zero
Project Zero
L
LangChain Blog
阮一峰的网络日志
阮一峰的网络日志
C
Cybersecurity and Infrastructure Security Agency CISA
T
Tailwind CSS Blog
S
Schneier on Security
Blog — PlanetScale
Blog — PlanetScale
The Hacker News
The Hacker News
Spread Privacy
Spread Privacy
Security Latest
Security Latest
NISL@THU
NISL@THU
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
CXSECURITY Database RSS Feed - CXSecurity.com
J
Java Code Geeks

熊言熊语

焦虑的反面是具体:用3年AI实践和你分享这份AI科研心得指南 | 熊言熊语 因为 AI 终于我可以尝试把自己最好的东西给你 | 熊言熊语 Guardant Shield 获批:详谈这5年你该了解的按部就班、跌跌撞撞 、布局和野望 | 熊言熊语 除了E人变I,断网半年后我的3个感悟和1个项目 | 熊言熊语 同源重组修复缺陷HRD :产品总览 | 熊言熊语 同源重组修复缺陷HRD:临床验证 | 熊言熊语 同源重组修复缺陷HRD:从无到有 | 熊言熊语 聊肿瘤生物标志物时我们在聊什么 | 熊言熊语 肿瘤组织和液体活检结果不一致,好事还是坏事 | 熊言熊语 肿瘤精准治疗究竟多难 看这7个临床实践障碍 | 熊言熊语 关于wolai被钉钉收购:多研究些问题少谈些逻辑 | 熊言熊语 MSKCC 尚待解决的肿瘤基因组检测临床应用问题 | 熊言熊语 不要错过的14档肿瘤研究专业相关播客 | 熊言熊语 从靶向治疗耐药机制到联合用药策略(下篇) | 熊言熊语 那些获得FDA突破性设备认证的多癌种早筛公司 | 熊言熊语 2022的混乱和坚持 2023的困难和勇敢 | 熊言熊语 从靶向治疗耐药机制到联合用药策略(上篇) | 熊言熊语 和头部肿瘤早筛公司 GRAIL CEO 学写年终工作总结 | 熊言熊语 2022年肿瘤精准治疗进展回顾 看OncoKB和FDA审批就够了 | 熊言熊语 Foundation Medicine 42万例样本库分析KRAS泛癌种突变特征得出了这些结论 | 熊言熊语 从2002年的Nature论文到2022年的亿元营收 | 熊言熊语 肿瘤NGS行业新人如何构建自己的知识体系 | 熊言熊语 Nature Genetics:低TMB患者福音 肿瘤非整倍体可预测泛癌免疫治疗疗效 | 熊言熊语 Nature Cancer:高度非整倍体非小细胞肺癌 放疗同步免疫治疗更敏感 | 熊言熊语 Nature Reviews Cancer:未来10年肿瘤精准治疗的6个未解之谜 | 熊言熊语 通过一份会议日程多了解点液体活检 | 熊言熊语 找到一种和这个世界沟通的方式 | 熊言熊语 跨越60年的癌症靶向治疗里程碑 | 熊言熊语 同样做肿瘤NGS检测,美股上市的9家公司近况如何 | 熊言熊语 30 岁,让我们成熟和改变的不是生日而是生活 | 熊言熊语 ctDNA系列之一:ctDNA的生物学特征、检测技术问题和临床应用方向 | 熊言熊语 在《Google软件工程》里了解如何在团队内进行学习和分享 | 熊言熊语 如何衡量个人在团队项目中的贡献 | 熊言熊语 万字长文|染色体不稳定性,凭什么2022年还能用TCGA数据发Nature | 熊言熊语 FDA发布ctDNA应用于早期实体瘤药物开发的指导意见 | 熊言熊语 单平台文章阅读量超过100万,我可能做对了三件事。 | 熊言熊语 Gitee图床被禁?云对象存储配合CDN方案以及图片批量迁移方法 | 熊言熊语 别再用DEseq2和edgeR进行大样本差异表达基因分析了 | 熊言熊语 春天来了,但你得准备好继续过冬 | 熊言熊语 任务如何才能按时完成 | 熊言熊语 从肿瘤突变列表到辅助临床决策 | 熊言熊语 半年毕业 半年工作 我的2021年度总结 | 熊言熊语 你也可以在学术报告中讲好一个引人入胜的故事 | 熊言熊语 OncoSearch 肿瘤研究必备(自用)聚合搜索工具 | 熊言熊语 读陌生领域文献,我劝你别读正文 | 熊言熊语 准备两个版本的PPT | 熊言熊语 通往更好的决定 | 熊言熊语 更多地写 但是写的更短 | 熊言熊语 问题出现我再告诉大家 | 熊言熊语 重做新人 NGS肿瘤领域可以学些什么 | 熊言熊语 新手和专家的区别以及如何看待学习 | 熊言熊语 完成这个需要多长时间 | 熊言熊语 从 MacBook Pro M1 安装编译 R 踩坑想到的 6年硕博生活的6条心得-生活成长篇 | 熊言熊语 面对职业教育缺失,在科研行业的我们能做什么 | 熊言熊语 全球顶尖科学家榜单 | 熊言熊语 构建自己的数字花园-工具篇 | 熊言熊语 使用R语言分析上海地铁好位置周边的二手房价格 | 熊言熊语 熊言熊语会员通讯 4321X 第5期 | 熊言熊语 关于 wolai 这款工具的观察与困惑 | 熊言熊语 关于个人的认知不确定性 | 熊言熊语 需要时刻留心的24个生物信息学提示 | 熊言熊语 要不要读博(答读者信) | 熊言熊语 熊言熊语会员通讯 4321X 第3期 | 熊言熊语 用三个问题回顾 2020(全员协作版) | 熊言熊语 熊言熊语会员通讯 4321X 第2期 | 熊言熊语 熊言熊语会员通讯 4321X 第1期 | 熊言熊语 熊言熊语会员通讯 4321X 第0期 阅读与分享 | 熊言熊语 有备而来的 4321X | 熊言熊语 macOS big sur 升级后编译 R 的问题 你的实验伴侣摸鱼首选和通勤第一品牌 | 熊言熊语 如何帮助别人 | 熊言熊语 21天日记挑战-5分钟日记法 | 熊言熊语 使用 Zotero 在 Markdown 中优雅地处理参考文献 VS Code 代码编辑器入门指南下篇-场景化应用介绍 | 熊言熊语 VS Code 编辑器入门指南上篇-核心概念与组件 | 熊言熊语 把 Markdown 模板做成 VSCode 插件 简书这些年 | 熊言熊语 靠谱熊的每周分享 第4期 | 熊言熊语 靠谱熊的每周分享 第3期 | 熊言熊语 非蠢既坏 别这么想 | 熊言熊语 靠谱熊的每周分享 第2期 | 熊言熊语 R 的 20 年 | 熊言熊语 靠谱熊的每周分享 第1期 | 熊言熊语 停课不停学 推荐 7 门有趣实用的线上课程 | 熊言熊语 在家复工,学生党如何使用学术资源 | 熊言熊语 跨平台协作,让飞书实时接收语雀更新提醒 | 熊言熊语 特殊时期假期返程实录 | 熊言熊语 需要远程办公,不妨用 Trello 进行组织和协作 | 熊言熊语 学习素材共享小组V2.0(已停止招募) | 熊言熊语 Trello 看板内容太多,飞书表格帮你自动整理 | 熊言熊语 把飞书融入日常学习流程:一个人的飞书也挺好 | 熊言熊语 人究竟怎样才算来过又怎样才算离开 | 熊言熊语 使用 VSCode 愉快地进行远程 R 开发 给一年前自己的一封信-2019 | 熊言熊语 眼见不为实:为什么29不等于29 | 熊言熊语 如何简快好省的使用图床 | 熊言熊语 这三个网站让我摸鱼都从容了 | 熊言熊语 我目前的云存储方法 | 熊言熊语
三个 Linux 文件高频小操作 | 熊言熊语
2020-05-30 · via 熊言熊语

2020-05-30, 1189 words, 5 min read

去除文件名后缀

在 Linux 中跑各种任务或者循环命令的时候,有一个高频的需求是截取一部分文件名。例如有文件 XXX_aaa.bb 和 YYY_aaa.bb ,很可能我们需要提取出 XXX 和 YYY 来给后续的文件进行命名。

实现这个需求的方法有不少。

利用变量中的 % 号。在 Linux 中使用百分号将变量的内容从变量的尾部删除。 一个%号可以从尾部最近位置进行匹配删除,两个%%从尾部最远位置匹配删除。同时支持使用通配符。例如id=XXX_aaa.bb 可以使用 ${id%%_*}

第二种方式是使用 cut cut -d ‘_’ -f 1。使用 _ 作为分隔符,输出第一列,也是可以得到 XXX

第三种是使用 awk,和 cut 类似也是指定分隔符输出第一列 ls *.bb| awk -F "_" '{print $1 }'

为了让脚本使用率更高一些,我通常会使用绝对路径来指定文件位置。为了更快的获取文件名,会使用命令 basename。basename 本身就有一个非常好用的功能,可以剔除指定的文件名结尾部分。如下所示,我觉得这个应该是最优雅的方式。

basename /a/b/c/XXXX_aaa.bb _aaa.bb
XXXX

批量重命名

场景如下,现在有好几百个文件需要重命名。类似于 A1.txt A1.md A1.pdf B2.txt B2.md B2.pdf ...
其中 A1 要全部替换为 C3 ,B2 要全部替换为 D4 变为,即 C3.txt C3.md C3.pdf D4.txt ...
已经有一个两列的文件是对应信息。

A1 C3
B2 D4

昨天在知识星球抛出这个问题之后有几个小伙伴给出了自己的建议,其中给我最大冲击的是一个小伙伴提出的 Excel 批量法,思路是用 Excel 对字符段组合出新的命令。

这个需求或许可以拆解为两个问题,一个是重命名,一个是批量。

重命名的方法 mv 或者 rename 都可以,批量很容易想到 for 循环,因为对应的一对变量已经在文件的一行了,所以只要把它们分别保存为两个变量就好了。这个需求更好的完成是方式是配合 while 和 read 来完成循环。
read 可以从标准输入或者管道以及文件描述符读取内容,而且非常方便的可以直接定义多个变量。

因此可以写为:

while read old new
do
echo $old $new;
rename "s/${old}/${new}/" ${old}*
done<changename.txt

如果把这个小小的命令变成一个 rename.sh 脚本,可以写成。

#!/bin/bash
FILE=$1
while read old new
do
echo $old $new;
rename "s/${old}/${new}/" ${old}*
done < $FILE

多说一句,关于理解 read 的用法,有一个小的测试题。

echo '1 2 3 4 5 6' | while read a b c
do
  echo $c $b $a
done

上面这个命令,请问输出的结果是什么?是 3 2 1 6 5 4 么?如果不是又会是什么呢?如果能直接说出 3 4 5 6 2 1 这个结果,应该就是理解了。

同文件名文件拷贝

这个需求也比较常见,在 Linux 中,不能的目录下都有可能存在相同的文件名,例如有些生信分析软件跑多套数据,通常只会在目录层面进行区分,而不会在文件名层面进行区分。可能的目录结果如下:

a: xx.txt yy.json zz.bam
b: xx.txt yy.json zz.bam

为了方便处理,我们通常习惯把同一个类型的文件放在一起,但是如果直接拷贝源文件,会因为文件名重复的问题带来灾难。这时就有了一个重命名再拷贝的问题。

重命的一个基本思路就是把需要的目录名加到源文件名字的前面或者后面。首先拿到实际的文件名可以使用 basename 命令,如果想拿到目录名则可以使用 dirname 命令。

for i in `ls */*.bam`
do
cp $i ./bamfile/$(dirname $i)_$(basename $i)
done

本文作者:思考问题的熊

版权声明:本博客所有文章除特别声明外,均采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 (CC BY-NC-ND 4.0) 进行许可。

如果你对这篇文章感兴趣,欢迎通过邮箱订阅我的 「熊言熊语」会员通讯,我将第一时间与你分享肿瘤生物医药领域最新行业研究进展和我的所思所学所想点此链接即可进行免费订阅。

· 分享链接 https://kaopubear.top/blog/2020-05-30-linuxfile3tips/