bash - 重命名从 txt 文件 (bash) 读取旧文件名和新文件名的文件
问题描述
我需要重命名目录中的一堆文件:
2016001.fas
2016002.fas
2016003.fas
...
阅读具有实际和新文件名选项卡分隔的 .txt:
2016001 L.innocua001
2016002 L.innocua002
2016003 L.monocytogenes001
...
也许在 bash 中使用单行 for 循环或管道。
作为说明,如果需要,我还可以使用 .csv 或逗号分隔的 .txt 格式获取包含实际文件名和新文件名的列表。我感谢所提供的帮助。
解决方案
xargs -a renames.txt -n 2 sh -c 'echo mv -- "$1.fas" "$2.fas"' _
xargs -a renames.txt
: 处理renames.txt
作为命令的参数的内容。-n 2
:一次选择 2 个参数。sh -c
: 命令是运行内联 shell- 内联外壳
'echo mv -- "$1.fas" "$2.fas"'
:使用 xargs 提供的参数 1 和 2 执行实际的重命名。
# remove echo when output matches the intent
echo mv -- "$1.fas" "$2.fas"
仅使用 shell 读取renames.txt
和执行重命名的方法:
while read -r a b; do
# Remove echo if satisfied by the output
echo mv -- "$a.fas" "$b.fas"
done <renames.txt
使用 awk 的替代方法,renames.txt
使用重命名命令将文件转换为 shell 脚本:
awk '{print "mv -- "$1".fas "$2".fas"}' renames.txt
一旦满足上述 awk 的输出;保存到 shell 脚本文件,或直接通过管道传输到 sh。
推荐阅读
- python - 我无法使用 numpy 和 pandas 创建此回归
- javascript - 如何在使用 JS 或 Jquery 之后插入 HTML 注释标记
- python - 创建熊猫数据框:在numpy上映射一个函数
- c# - 如何让 Identity Server 4 在我的本地机器上通过 HTTPS 运行?
- javascript - 使用 filepond 删除文件
- c# - 将浏览器中的 solr 参数转换为 c# json
- oracle - 更新我的评论部分时触发描述太长错误
- android - 为什么我的回收站视图在 TabLayout 中滚动时会崩溃?
- xaml - 如何创建一个存在于 CollectionView 末尾且具有 GridItemsLayout 的页脚?
- java - Android studio错误导致无效距离太远