bash - 使用 For 循环重命名 Bash
问题描述
我有文件名 filename.gz.1,我需要将它们重命名为 filename.gz,有很多文件,每个名称都不同,
我知道我不能这样for i in $(ls); do mv $i $i.1; done
做,但是我可以反过来做吗,从 filename.gz.1 到 filename.gz 并保留原始文件名?
我试过这个,
for i in $(ls | grep "xz\|gz"); do echo "mv $i $i | $(rev) | $(cut -c3-) | $(rev) |)"; done
但这忽略了我的管道。
谁能帮我?
解决方案
--extended-regexp
使用管道作为分隔时必须使用。
echo -e "foo.xz\nbar.gz\nbaz" | grep -E "(xz|gz)"
并且不要ls
用于列出您的文件,它不会保存。相反,您可以使用循环来搜索文件。
for file in /PATH/TO/FILES; do
echo $file
done
我还建议使用正则表达式来搜索以数字结尾的文件名,例如 ...
if [[ $file =~ [[:digit:]]$ ]]; then
echo ${file%.*}
fi
推荐阅读
- ios - 在哪里可以查看大型 iOS 代码库以了解其组织方式?
- javascript - 如何在我的方法中通过 Paypal Orders API 的使用授权以及我应该返回什么?
- ios - 无法在 iOS 中初始化 crashlytics
- python - 变量中的 Python 字符串方法
- python - python,如何获得更平滑的值?
- swift - 尝试构建一个可以接受任何类型数字的乘法函数
- c - 使用 FILE * 打开文件后如何释放泄漏的内存?
- ffmpeg - 具有非标准通道布局的 ffmpeg 耳机卷积音频滤波器
- c++ - 访问我不应该被允许访问的数据成员
- javascript - Django - 无法将 Django 表单的 id 传递给 javascript 变量