我有一些这样的文件:
database1-backup-01-01-2011.sql
database2-backup-01-01-2011.sql
...等等。我想重命名它们以添加 AM,如下所示:
database1-backup-01-01-2011-AM.sql
database2-backup-01-01-2011-AM.sql
从 bash shell 执行此操作的最简洁的方法是什么?
答案1
另外一个选择:
for i in *.sql ; do
mv -v $i ${i%.sql}-AM.sql
done
这将循环遍历所有.sql文件并将它们重命名为以-AM.sql结尾。
专家提示:在脚本(和命令行)中使用$(command)
而不是,可以使引用和转义不再那么困难。`command`
答案2
尝试这个小脚本:
#!/bin/sh
FILES=`ls *.sql`
for FILE in ${FILES}
{
BASE=`basename ${FILE} .sql`
mv ${FILE} ${BASE}-AM.sql
}
我只是根据记忆输入了该内容,因此如果它不能 100% 起作用,请不要怪我(即,先备份您的数据 ;))
怎么运行的:
将所有文件收集到一个变量中(您可以将其放在 for 中,但我喜欢让内容易于阅读):
FILES=`ls *.sql`
循环遍历每个文件:
for FILE in ${FILES} { ... }
获取不带.sql的文件名:
BASE=`basename ${FILE} .sql`
重命名文件,在基本名称中添加 -AM.sql:
mv ${FILE} ${BASE}-AM.sql
答案3
rename 's/\.sql$/-AM$&/' *.sql
使用util-linux-ng
版本的rename
(但仅当“ .sql”出现在文件名末尾时):
rename .sql -AM.sql *.sql
使用mmv
:
mmv '*.sql' '#1-AM.sql'
答案4
qmv
我建议使用重命名工具
程序qmv
将在您的默认文本编辑器中打开所选目录的文件名列表并允许您编辑它们。当您保存此已编辑的文件列表时,它会将新名称应用于实际文件。